javascript - 查找在对象上调用了哪个方法

标签 javascript

是否可以在不在对象主体中的情况下找到在对象上调用了哪个方法?

我的意思是:

 function foo() {
   if(! (this instanceof foo) ) return new foo();
   alert(this.find_which_method_was_called()); // output 'myMethod'
 }

 foo().myMethod();

最佳答案

myMethod()foo() 构造函数返回后被调用,因此您不可能知道它是否在构造函数中被调用。

但是,您可以将对象包装在代理中,并将所有调用的函数的名称保存在数组中:

function Proxy(object) {

    this.calledFunctions = [];

    for (var name in object) {
        if (typeof object[name] != 'function') {
            continue;
        }
        this[name] = (function (name, fun) {
            return function() {
                this.calledFunctions.push(name);
                return fun.apply(object, arguments);
            };
        }(name, object[name]));
    }
}

现在你可以这样做了:

var f = new Proxy(new foo());
f.myMethod();
alert(f.calledFunctions);

关于javascript - 查找在对象上调用了哪个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11347510/

相关文章:

javascript - Aerospike - 语法错误 : Unexpected token {

javascript - 如何循环遍历对象的对象?

javascript - 我必须遵循哪些规则才能编写不带分号的有效 Javascript?

javascript - 使用 webpack 时未找到自定义 jQuery 扩展/插件

javascript - 使用正则表达式从文件名中获取标题和年份

javascript - 需要用Javascript替换 "$"为 "_"

javascript - 避免闭包引起的 jQuery Mobile 内存泄漏

javascript - 为什么 isNaN ('' ) 或 isNaN ("") 为 false(单引号或双引号被视为有效数字)?

javascript - 从 UserAgent 字符串中解析浏览器和操作系统信息

javascript - 从 Javascript 读取 web.config 值