是否可以找到对象上调用的方法而不将其放在对象的主体中?
我的意思是:
function foo() {
if(! (this instanceof foo) ) return new foo();
alert(this.find_which_method_was_called()); // output 'myMethod'
}
foo().myMethod();
答案 0 :(得分:4)
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);