无法在 setTimeout() 函数调用的对象函数中使用 "this" 属性 获取对象变量
can't get object variable with "this" property in object function called by setTimeout() function
我还有一个问题。我目前正在处理对象,但我现在遇到了一个非常大的问题:D。如何在 setTimeout() 函数调用的对象函数中使用 "this" 属性 获取对象变量?
HTML:
variable value: <span class="log"></span>
JavaScript:
var logEl = document.getElementsByClassName("log")[0];
var Object = function()
{
this.variable = "abc";
setTimeout(this.callVar,1000);
}
Object.prototype.callVar = function()
{
logEl.innerHTML = this.variable;
}
var obj = new Object();
我想得到variable value: abc
,但我还是得到了undefined
。如何解决? setTimeout() 必须在代码中。
此外,我不想用 obj.
替换 this.
,只是另一个解决方案,如 parentObj.this.
...任何帮助都会很棒!
Fiddle
当 setTimeout
调用函数时,它会在 "global" 对象 (window
) 的上下文中调用它。在 JavaScript 中,this
是根据 调用函数的方式设置的 。
JavaScript 已经 .bind()
解决了这个问题。试试这个:
var Object = function()
{
this.variable = "abc";
setTimeout(this.callVar.bind(this), 1000);
}
这将确保当 setTimeout
运行您的函数时,它会在右侧 "context" 被调用。
P.S。不要命名变量 Object
。 JavaScript 有一个内置的 Object
,替换它可能会产生意想不到的后果。
我还有一个问题。我目前正在处理对象,但我现在遇到了一个非常大的问题:D。如何在 setTimeout() 函数调用的对象函数中使用 "this" 属性 获取对象变量?
HTML:
variable value: <span class="log"></span>
JavaScript:
var logEl = document.getElementsByClassName("log")[0];
var Object = function()
{
this.variable = "abc";
setTimeout(this.callVar,1000);
}
Object.prototype.callVar = function()
{
logEl.innerHTML = this.variable;
}
var obj = new Object();
我想得到variable value: abc
,但我还是得到了undefined
。如何解决? setTimeout() 必须在代码中。
此外,我不想用 obj.
替换 this.
,只是另一个解决方案,如 parentObj.this.
...任何帮助都会很棒!
Fiddle
当 setTimeout
调用函数时,它会在 "global" 对象 (window
) 的上下文中调用它。在 JavaScript 中,this
是根据 调用函数的方式设置的 。
JavaScript 已经 .bind()
解决了这个问题。试试这个:
var Object = function()
{
this.variable = "abc";
setTimeout(this.callVar.bind(this), 1000);
}
这将确保当 setTimeout
运行您的函数时,它会在右侧 "context" 被调用。
P.S。不要命名变量 Object
。 JavaScript 有一个内置的 Object
,替换它可能会产生意想不到的后果。