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

igo*_*rti 4 javascript

考虑以下代码:

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)