设置构造函数原型的__proto__

时间:2013-12-23 17:18:35

标签: javascript inheritance constructor

我从Base类继承到Derived类,如下所示:

Base is ViewDerived is ItemVIew

function ItemView(){
View.call(this);
}

ItemView.prototype.__proto__ = View.prototype 

只需

即可实现上述目标
Iteview.prototype = new View;

我还有另一个问题

当我设置ItemView.prototype.__proto__ = View.prototype时 ,ItemView的原型是Function.prototype 这意味着我正在设置Function.prototype.__proto__ = View.prototype 所以View.prototype的所有方法都由我定义的每个其他构造函数继承?

我可以通过ItemView.__proto__ = View.prototype来解决吗?

扩展基类如View的推荐方法是什么,以便ItemView仍然是构造函数?

1 个答案:

答案 0 :(得分:4)

ItemView.prototype引用的对象将被指定为通过new ItemView创建的对象的基础原型。 ItemView.prototype.__proto__可能(在拥有它的实现上)为Object.prototype

但不,你不想做ItemView.prototype = new View(); - 如果View需要参数怎么办?这是一个非常常见的错误。

相反,在ES5之前的环境中:

function Temp() {
}
Temp.prototype = View.prototype;
ItemView.prototype = new Temp();
ItemView.prototype.constructor = ItemView;

在ES5环境中:

ItemView.prototype = Object.create(View.prototype);
ItemView.prototype.constructor = ItemView;

...并继续View.call(this)内的ItemView