如何正确获得此参考

时间:2014-04-15 19:31:56

标签: javascript

我试图找出如何在不调用函数或至少不调用原始函数的情况下获取此函数。这需要专家对javascript的理解。甚至可能无法开始。但我认为如果它不会使用像事件,回调和setTimeouts这样的占位符函数来节省大量的时间......

这应该引用该函数所属的对象而不直接调用它。

我想做的事情:

说我的功能如下:

function add2(x) {
   return x+2;
}

然后执行此操作:

setTimeout(add2**pass parameter without invoking it**, 1000);

如果我这样做了 setTimeout(add2(3), 1000);它会马上执行。

所以要做到这一点,我这样做:

Function.prototype.pass= function(){ 
          var func=this, args=arguments;
          return function() {
          func.apply(this,args);
        }
};

然后这样称呼:

setTimeout(add2.pass(3), 1000); //5

这很棒,一切都有效。但是当它在一个对象内部并且需要访问对象的数据时,它会失败。 this 总是指函数本身。这样做会产生错误:

var o= {
            a:3,
            log:function(){console.log(this.a);}
};

o.log.pass(); //will just output the log function itself.

我只有在this行传递正确的func.apply(this,args);引用时才能解决它。

1 个答案:

答案 0 :(得分:2)

您可以使用.bind()

setTimeout(add2.bind(this, 3), 1000);
//                         ^ the parameter

第二个参数是在调用函数时传递给函数的参数。