在不同的上下文中运行设置超时
Running setTimeout in different context?
是否可以使用 call
或 apply
在另一个上下文中运行 setTimeout
函数?我试过了,但他们返回错误说"非法调用"。
var myvar = 10;
function myfun() {
console.log("normal run "+myvar);
}
var myobjvar = {
myvar : 26,
myfun1 : function() {
console.log("context run "+this.myvar1);
}
}
setTimeout(myfun, 1000);
setTimeout.call(myobjvar, myobjvar.myfun1, 1000) // errors out!!
Function.call
和Function.apply
允许您更改函数内 this
关键字的绑定。但是当你使用setTimeout
时,你不需要这样做,因为setTimeout
根本不使用this
- 或者如果它这样做,你不应该知道它。
相反,您希望更改函数本身中this
的含义。您可以使用Function.bind
来执行此操作:
setTimeout( myobjvar.myfun1.bind(myobjvar), 1000);
这基本上与以下任一内容相同:
setTimeout( function(){ myobjvar.myfun1() }, 1000);
setTimeout( function(){ myobjvar.myfun1.call(myobjvar) }, 1000);
您可以使用
.bind()
来设置上下文。
JSFiddle
var myvar = 10;
function myfun() {
console.log('normal run ' + myvar);
}
var myobjvar = {
myvar : 26,
myfun1 : function() {
console.log('context run ' + this.myvar);
}
}
setTimeout(myfun, 1000);
setTimeout(myobjvar.myfun1.bind(myobjvar), 1000);
相关文章:
- jquery设置为使用参数运行
- 在jquery函数内部设置来自jquery函数的var;t运行
- 如何停止一个函数并将其他函数设置为在 html5 的 javascript 中加载时运行
- 立即运行设置间隔
- 在运行时用JavaScript设置函数的名称
- 一旦设置了PHP查询字符串,如何运行jQuery脚本
- 根据选中的按钮运行不同的计算时,设置单选按钮
- Angularjs,在运行时设置价值服务的值
- Grunt为任务设置选项,并使用新值运行该任务
- JQuery val()在设置表单值时引发运行时错误
- 设置为“run_at”document_start“的 Chrome 扩展程序运行速度太快
- 如何在运行时在 ngResource 查询方法中设置超时
- 设置设置间隔函数正在运行并导致浏览器崩溃
- Flask wtf.quick_form运行一些 JavaScript 并设置表单变量
- 在浏览器空闲后保持设置超时函数运行
- 为数组中的每个间隔 ID 再次运行设置间隔
- 如何防止在 Safari 中使用 javascript 设置高度后在页面加载时运行过渡
- 通过在运行时使用 CSS 设置其高度/宽度来拉伸 img 会产生奇怪的渐变
- 如果通过 ajax 调用 PHP 页面需要一段时间才能运行/返回(并且它设置了会话变量),则第二次 ajax 调用会看到
- 在不同的上下文中运行设置超时