在javascript中覆盖现有对象的功能

时间:2011-02-08 12:57:53

标签: javascript

请考虑以下代码:

mynamespace.myclass = function() {
    this.myfunction = function() { alert("Original"); }
}

我要做的是从mynamespace.myclass声明之外覆盖myfunction。

虽然通过原型添加新函数似乎工作正常,但如果我定义一个具有相同名称的函数,原始函数不会被覆盖:

  

mynamespace.myclass.prototype.myfunction = function(){        警报( “被覆盖的”);     }

有什么想法吗?

1 个答案:

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