请考虑以下代码:
mynamespace.myclass = function() {
this.myfunction = function() { alert("Original"); }
}
我要做的是从mynamespace.myclass声明之外覆盖myfunction。
虽然通过原型添加新函数似乎工作正常,但如果我定义一个具有相同名称的函数,原始函数不会被覆盖:
mynamespace.myclass.prototype.myfunction = function(){ 警报( “被覆盖的”); }
有什么想法吗?
答案 0 :(得分:13)
那是因为 你必须通过覆盖myfunction
正在构造函数中添加,在添加原型属性之后发生(因此“原始”实际上覆盖了“覆盖”)。 / p>
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