我很好奇我是否可以修改类prototype.init()函数,因为我想扩展一个库并且要做到这一点我必须在类的初始化中添加一些新变量。
我已经完成了这样的原型继承:
function Extension() {};
Extension.prototype = Toolbar.prototype;
Extension.prototype.constructor = Extension;
现在我想用扩展中的一些额外变量初始化Parent.prototype.init。 这样做的好方法是什么?
答案 0 :(得分:0)
此步骤不正确:
Extension.prototype = Toolbar.prototype;
这意味着您的Extension
未展开Toolbar
- 它实际上共享原型,因此您添加到Extension
原型的任何内容都将添加到Toolbar
的原型也是如此。 (当然这不是你想要的!)
相反,请执行:
Extension.prototype = Object.create(Toolbar.prototype);
因此Extension
原型是一个全新的对象,它继承了Toolbar
原型的属性。修改此新对象不会对Toolbar.prototype
产生不必要的上游影响。
要添加原型属性,只需将它们添加到Extension.prototype
:
Extension.prototype.someExtensionAction = function(someParam) {
return 100 + this.init(someParam);
}
然后,您可以在Extension
个实例上访问这些属性:
var myExtensionInstance = new Extension();
myExtensionInstance.someExtensionAction(17);
答案 1 :(得分:0)
我找到了一种做我想做的事情。
现在我很了解apply()是如何工作的。
var parentInit = Parent.prototype.init;
Toolbar.prototype.init = function()
{
parentInit .apply(this, arguments);
// Your code here
};