javascript - 将代码附加到任何范围内的 JS 函数

标签 javascript scope user-defined-functions

基于此讨论的问题: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/

相关文章:

javascript - 如何在 angular.js 中调用 ng-title 属性上的作用域函数

lua - 使用单个 UDF 一致地操纵多个 Aerospike 集

javascript - 在 Google map V3 上动态添加 InfoWindows 和标记

javascript - 如何通过knockout js启用/禁用可编辑div上的按钮

python - 列表推导式中定义的变量是否会泄漏到封闭范围中?

spring-mvc - @scope ("request") 不起作用,spring mvc 仍然返回一个单例

javascript - jQuery 淡入淡出效果未按预期工作

javascript - OOP javascript 存储功能如何

c - 在 C 中的用户定义函数中将文本文件中的数字读取到数组

sql-server - 在 View 中使用调用 GETDATE() 的函数是否始终比直接使用 GETDATE() 提供更差的性能?