Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找对对象调用的方法_Javascript - Fatal编程技术网

Javascript 查找对对象调用的方法

Javascript 查找对对象调用的方法,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 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);
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);

myMethod()
foo()
构造函数返回后调用,因此您不可能知道它是否在构造函数中调用。这可能会有所帮助:
myMethod()
foo()
构造函数返回后调用,因此,您不可能知道它是否在构造函数中被调用。这可能会有所帮助:谢谢,但是可以在不使用“new Proxy(new foo());”的情况下使用代理吗?在foo()中,尝试在构造函数末尾返回
new Proxy(This)
。谢谢,但是在foo()中,可以在不使用“new Proxy(new foo());”的情况下使用代理吗,尝试在构造函数末尾返回
新代理(this)