Javascript - 克隆原型函数

时间:2016-03-01 16:26:33

标签: javascript prototype

我想修改外部库的原型函数,以便在调用该函数之前执行某些代码。我虽然克隆了这个功能,然后用一个新的替换它:

请注意,我使用的是another question

中的克隆功能

这是一个简化示例:

var oldFunction = anObject.aFunction.clone();
anObject.aFunction = function(a, b, c) {
    if (a > b) {
        return;
    } else {
       oldFunction(a, b, c);
    }
}

Function.prototype.clone = function() {
    var that = this;
    var temp = function temporary() { return that.apply(this, arguments); };
    for(var key in this) {
        if (this.hasOwnProperty(key)) {
            temp[key] = this[key];
        }
    }
    return temp;
};

然而,这样做,oldFunction似乎失去了对this的所有原始引用。

有解决方案吗?

2 个答案:

答案 0 :(得分:1)

你需要用正确的方法调用它:

oldFunction.call(this, a, b, c);

答案 1 :(得分:1)

我认为您不需要克隆该功能,只需保留对它的引用即可。或者更准确地说,使用正确的this绑定创建函数的副本。

var oldFunction = anObject.aFunction.bind(anObject);
anObject.aFunction = function(a, b, c) { ... };

bind使用第一个参数指定的this创建给定函数的副本。它也可以用于绑定参数。