Javascript JS-使用超时时使用此引用

Javascript JS-使用超时时使用此引用,javascript,web,timeout,this,invocation,Javascript,Web,Timeout,This,Invocation,当我使用超时时,如何保持此引用的状态 var o = { f:function(){ console.log(this) setTimeout(this.f,100); } } o.f(); 当我运行此代码时,此引用错误。。。我遗漏了什么?您可以将参数作为第三个参数传递给setTimeout。这样你就可以传递一个引用 但是,如果您试图用new创建一些“面向对象”的东西,则应使用如下函数: function obj() { this.publicFunct

当我使用超时时,如何保持此引用的状态

var o = {
   f:function(){
     console.log(this)
     setTimeout(this.f,100);
     }
}
o.f();

当我运行此代码时,
引用错误。。。我遗漏了什么?

您可以将参数作为第三个参数传递给setTimeout。这样你就可以传递一个引用

但是,如果您试图用new创建一些“面向对象”的东西,则应使用如下函数:

function obj() {
  this.publicFunction = function() {
    console.log("I'm public!");
  };
  var privateFunction = function() {
    console.log("Only accessible from inside this instance!");
  }
}

var objInstance = new obj();
objInstance.publicFunction(); // Logs w/o problem
objInstance.privateFuntion() // Undefined!
编辑(再次): 但是如果你真的出于某种原因想使用一个对象,
这个
在一个对象中,实际上引用了对象本身。但是由于对象被定义为变量(在您的例子中也是全局变量),因此可以直接引用名称,而不是
this
。在这里:

var o = {
  f: function() {
    console.log(this);  // Will log the object 'o'
    console.log(o);  // Same as above
  }
};

setTimeout(o.f, 100);
取决于方法。有关更多详细信息,请参阅我的。
f()是o的成员,但o.f是传递给timeout并使用functional调用的函数。 这将为您提供所需的结果

var o = {
   f:function(){
     console.log(o)
     setTimeout(o.f,100);
     }
}
o.f();
下面是通过函数调用调用的成员函数的另一个示例:请参见我的


希望这能有所帮助。

这段代码在语法上是不正确的。o是一个对象文字,所以您的代码通常是错误的(this.f=甚至f=不起作用!)o应该是什么?函数?对象文字?你想如何使用你的代码???可能是重复的是的我刚想起来。。然而,我认为OP是为“面向对象”的东西而设计的,我编辑并添加了一个例子。我相信将附加参数传递到setTimeout中会有兼容性问题,但我不知道细节。替代解决方案使用闭包或Function.prototype.bind
var anObject = {
    test: function(isThis, message) {
        if(this === isThis) 
            console.log("this is " + message);
        else
            console.log("this is NOT " + message);
    }//I am a method
};

//method invocation
anObject.test(anObject, "anObject"); //this is anObject

var aFunction = anObject.test;
//functional invocation
aFunction(anObject, "anObject with aFunction"); //this is NOT anObject with aFunction
aFunction(this, "global with aFunction");//this is global with aFunction