我从Base
类继承到Derived
类,如下所示:
说Base is View
和Derived 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仍然是构造函数?
答案 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
。