网络编程
位置:首页>> 网络编程>> JavaScript>> [翻译]JavaScript中对象的层次与继承(10)

[翻译]JavaScript中对象的层次与继承(10)

作者:chenzhe 来源:chenzhe 发布时间:2008-12-31 13:36:00 

标签:类,对象,继承,javascript,编程


没有多继承(Multiple Inheritance)

一些面向对象语言允许多继承。也就是,一个对象可以从不相关的多个父对象中继承属性和值。JavaScript并不支持多继承。

正如我们已经说的,属性值的继承发生在运行时,是通过JavaScript在对象的原型链中搜索一个属性值(实现的)。因为一个对象只有一个关联的原型,JavaScript不能动态地从多个原型链中继承属性。

在JavaScript中,你可以在一个构造函数中调用多个构造函数。这可以制造一种多继承的假象。举例来说,考虑如下的语句:

程序代码

function  Hobbyist (hobby) {
  this.hobby = hobby ||  "scuba";
}
function  Engineer (name, projs, mach, hobby) {
  this.base1  = WorkerBee;
  this.base1(name, "engineering",  projs);
  this.base2 =  Hobbyist;
  this.base2(hobby);
  this.projects  = mach || "";
}
Engineer.prototype = new WorkerBee;

dennis = new  Engineer("Doe, Dennis", ["collabra"], "hugo")

进一步假设WorkerBee的定义和我们之前看到的一样。在这种情况下,dennis对象有如下的属性:

程序代码

dennis.name ==  "Doe, Dennis"
dennis.dept ==  "engineering"
dennis.projects ==  ["collabra"]
dennis.machine == "hugo"
dennis.hobby  == "scuba"

所以dennis确实从Hobbyist构造器中取得了hobby属性。然而,假设你之后又向Hobbyist构造器的原型中添加了属性:

程序代码

Hobbyist.prototype.equipment  = ["mask", "fins", "regulator", "bcd"]

dennis对象并不会继承这个新的属性。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com