JS-使用timeOut时的此引用
JS - this reference when using timeOut
使用timeOut时,如何保留此引用?
var o = {
f:function(){
console.log(this)
setTimeout(this.f,100);
}
}
o.f();
当我运行此代码时,this
引用是错误的。。。我错过了什么?
这取决于调用方法。有关更多详细信息,请参阅我的另一个stackoverflow答案
f()是o的一个成员,但o.f是传递给timeout并通过函数调用调用的函数。这将给你带来想要的结果。
var o = {
f:function(){
console.log(o)
setTimeout(o.f,100);
}
}
o.f();
下面是用函数调用调用的成员函数的另一个例子:参见我的Fiddle
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
希望这能有所帮助。
您可以将参数作为第三个参数传递到setTimeout中。这样你就可以传递一个引用。
然而,如果你试图用新的东西创建一些"面向对象"的东西,你应该使用一个函数来代替:
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
实际上是对对象本身的引用。但是,由于对象被定义为变量(在您的情况下也是全局的),因此可以直接引用名称而不是this
。此处:
var o = {
f: function() {
console.log(this); // Will log the object 'o'
console.log(o); // Same as above
}
};
setTimeout(o.f, 100);
相关文章:
- 无法获取属性'Id'使用Knockout.js的未定义或空引用API
- 获取对使用Tampermonkey使用javascript创建的元素的引用
- 在gump和nodejs中使用Typescript时,未定义对require和exports的引用
- 如何使用javascript var引用Mongo DB集合's字段
- 使用dc.js、d3.js和crossfilter引用错误
- 如何使用object.assign()从其他对象引用基本对象属性
- 如何在使用Ractive.extend()时引用DOM元素
- 使用WeakMaps在Javascript中创建常规弱引用
- 如何使用hasOne和sequelize.js引用两个表
- 如何使用角度事件处理程序引用输入元素的值
- 可以“;超级“;可以在子类的方法内部使用,在不直接引用的情况下调用相应的超类方法
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- Cordova:未捕获引用错误:chbrody没有使用SQLitePlugin.js定义PhoneGap
- 使用javascript点击事件的循环引用
- 在不引用文档的情况下使用AngularJS获取元素
- 使用闭包创建原型中引用的私有属性
- 引用错误:在尝试使用ajax发送数据时未定义
- 如何使用Dojo引用Google Maps事件中的包含类
- 使用jQuery选择所有Cite引用
- 我需要引用使用 .get() 创建的数组