基于此讨论的问题:Adding code to a javascript function programmatically
我读了this question希望找到一种将代码附加到 JS 函数的通用方法。不幸的是,the top answer这个问题似乎只适用于全局可用的功能。我需要一种方法让它在没有全局范围的情况下工作。例如,https://jsfiddle.net/Ylluminarious/rc8smp1z/
function SomeClass () {
this.someFunction = function() {
alert("done");
};
this.someFunction = (function() {
var cached_function = someFunction;
return function() {
alert("new code");
cached_function.apply(this, arguments); // use .apply() to call it
};
}());
}
someInstance = new SomeClass();
someIntance.someFunction();
如果您运行此代码,您将收到类似以下内容的错误:ReferenceError: Can't find variable: someFunction
。我不确定为什么这段代码会发生这种情况,因为我被告知这种附加代码的方法可以在任何范围内工作,但似乎并非如此,至少对于这段代码而言。有谁知道解决这个问题并使上面的代码工作的方法吗?
编辑:
对不起,没关系。我只犯了几个愚蠢的错别字。
最佳答案
除了 someInstance 的拼写错误之外,问题在于您的闭包范围以及 someFunction 在您的新自执行函数中不可见的事实。您需要传入对包含范围的 this 的引用才能在新范围中访问它:
function SomeClass () {
this.someFunction = function() {
alert("done");
};
this.someFunction = (function(that) {
var cached_function = that.someFunction;
return function() {
alert("new code");
cached_function.apply(this, arguments); // use .apply() to call it
};
}(this));
}
someInstance = new SomeClass();
someInstance.someFunction();
关于javascript - 将代码附加到任何范围内的 JS 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29753865/