2016-03-01 76 views
0

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

请注意,我用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

有没有解决方案?

回答

1

我不认为你需要克隆的功能,只保留一个参考吧。或者更准确地说,使用正确的this绑定创建函数的副本。

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

bind创建具有this由第一参数指定的给定功能的副本。它也可以用来绑定参数。

1

你需要用正确的这个称呼它:

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