Javascript 修改父prototype.init()函数
我很好奇是否可以修改一个类prototype.init()函数,因为我想扩展一个库,为此我必须在类的初始化中添加一些新变量 我做过这样的原型继承:Javascript 修改父prototype.init()函数,javascript,oop,Javascript,Oop,我很好奇是否可以修改一个类prototype.init()函数,因为我想扩展一个库,为此我必须在类的初始化中添加一些新变量 我做过这样的原型继承: 函数扩展(){}; Extension.prototype=Toolbar.prototype; Extension.prototype.constructor=扩展 现在我想用扩展中的一些额外变量初始化Parent.prototype.init。 这样做的好方法是什么?此步骤不正确: Extension.prototype = Toolbar.pr
函数扩展(){};
Extension.prototype=Toolbar.prototype;
Extension.prototype.constructor=扩展代码>
现在我想用扩展中的一些额外变量初始化Parent.prototype.init。
这样做的好方法是什么?此步骤不正确:
Extension.prototype = Toolbar.prototype;
这意味着您的扩展
不扩展工具栏
——它实际上共享一个原型,因此您添加到扩展
的原型中的任何内容也将添加到工具栏
的原型中。(当然这不是你想要的!)
相反,要:
Extension.prototype = Object.create(Toolbar.prototype);
因此,扩展
原型是一个全新的对象,它继承了工具栏
原型的属性。修改此新对象不会对工具栏产生不必要的上游影响。prototype
要添加原型属性,只需将它们添加到扩展。原型:
Extension.prototype.someExtensionAction = function(someParam) {
return 100 + this.init(someParam);
}
然后,您可以在扩展
实例上访问这些属性:
var myExtensionInstance = new Extension();
myExtensionInstance.someExtensionAction(17);
我找到了做我想做的事的方法
现在我知道apply()是如何工作的,这很容易
这是个坏主意:修改其他库提供的对象肯定会导致意外的bug和问题。消费者不希望事物在幕后神奇地改变,考虑他们的类和<代码>扩展< /代码>它们(或者使用你的代码中的传统<代码>对象.CREATE())/>代码>方法,并通过你的库提供。问题是我必须使用香草JS来等待,您想实际修改工具栏
的初始化
,还是希望扩展
具有调用工具栏
的初始化
(而扩展
的函数需要额外的参数,但将预期的参数传递到原始的初始化
)我想要第二个
var parentInit = Parent.prototype.init;
Toolbar.prototype.init = function()
{
parentInit .apply(this, arguments);
// Your code here
};