【发布时间】:2013-02-22 08:02:16
【问题描述】:
要在Javascript中实现继承,一般做以下2个步骤;
假设我有一个基类“动物”
var Animal = function(name){
this.name = name;
}
我现在想从中派生一个子类“Dog”。所以我想说
var Dog = function(name) {
Animal.call(this,name);
}
所以我从派生类构造函数中调用我的父类构造函数。 第二步,设置原型如下;
Dog.prototype = new Animal();
现在我可以从派生类 Dog 中访问任何基本的“动物”类属性。
所以我的问题是为什么这两个步骤是必要的? 如果我们只是使用
调用基类构造函数Animal.call(this,name);
这还不足以实现继承吗?
为什么我们还需要使用Dog.prototype = new Animal();设置原型属性?
我想了解以上 2 个步骤中的每一个的作用是什么?
【问题讨论】:
-
你在这里没有任何东西可以继承。
-
因为
Animal也可以使用原型链继承。简单地调用父构造函数不会保留该继承链。 -
是不是说 call() 只是从基类继承属性,而第二步(设置原型)从基类继承方法?
-
@testndtv
call()不执行继承,它只是向this添加新成员(属性或方法),而new继承父类原型的任何成员。有关详细信息,请参阅我的答案:)
标签: javascript jquery inheritance prototypal-inheritance