考虑以下代码:
mynamespace.myclass = function() {
this.myfunction = function() { alert("Original"); }
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是从mynamespace.myclass声明之外覆盖myfunction.
虽然通过原型添加新函数似乎工作正常,但如果我定义一个具有相同名称的函数,原始函数不会被覆盖:
mynamespace.myclass.prototype.myfunction = function(){alert("Overwritten"); }
有任何想法吗?
Dav*_*ang 13
那是因为myfunction正在构造函数中添加,这是在添加原型属性之后发生的(因此"原始"实际上覆盖了"覆盖").
你必须通过覆盖mynamespace.myclass自己来模仿这种行为:
var oldClass = mynamespace.myclass; // Copy original before overwriting
mynamespace.myclass = function () {
// Apply the original constructor on this object
oldClass.apply(this, arguments);
// Now overwrite the target function after construction
this.myfunction = function () { alert("Overwritten"); };
};
mynamespace.prototype = oldClass.prototype; // Same prototype
Run Code Online (Sandbox Code Playgroud)