修改父prototype.init()函数

时间:2018-06-13 15:43:23

标签: javascript oop

我很好奇我是否可以修改类prototype.init()函数,因为我想扩展一个库并且要做到这一点我必须在类的初始化中添加一些新变量。

我已经完成了这样的原型继承:

function Extension() {}; Extension.prototype = Toolbar.prototype; Extension.prototype.constructor = Extension;

现在我想用扩展中的一些额外变量初始化Parent.prototype.init。 这样做的好方法是什么?

2 个答案:

答案 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
};