我想修改外部库的原型函数,以便在调用该函数之前执行某些代码。我虽然克隆了这个功能,然后用一个新的替换它:
请注意,我使用的是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
的所有原始引用。
有解决方案吗?
答案 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
创建给定函数的副本。它也可以用于绑定参数。