var f = function(){ this.fname = 'F Function'; }; //invoke from bar and bar2 func f.prototype.sayName = function(){ alert(window == this); // when invoke from bar then true, bar2 then false alert(this.fname); //when invoke from bar then 'undefined', bar2 then 'F Function' }; //invoke sayName func in setTimeout f.prototype.bar = function(){ setTimeout(this.sayName,1000); // or //var that = this; //setTimeout(that.sayName,1000); alert(window == this) remain show false in sayName fun }; //invoke sayName func in setTimeout f.prototype.bar2 = function(){ var that = this; setTimeout(function(){that.sayName()},1000) } var ins = new f(); ins.bar(); //true 'undefined' ins.bar2(); // false 'F Function'
以上例子能解释 this 在setTimeout 中的 含义。
原因(https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout#The_%27this%27_problem):
相关推荐
最近在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,详细的介绍通过一个示例展开,一起来看看吧。 如下例: var num = 0; function Obj (){ ...
解决方法如下: 1、定义一个self暂存this 2、再改变变量的值,则生效啦 var self=this;...当在vue中使用定时器来修改一个变量值的时候,发现没有效果,这是由于setTimeout函数调用的代码运行在与所
在Javascript里,setTimeout和setInterval接收第一个参数是一个字符串或者一个函数,当在一个对象里面用setTimeout延时调用该对象的方法时 代码如下: function obj() { this.fn = function() { alert(...
在Vue的大型单页应用中,在某个路由下,经常会出现需要延迟执行(setTimeout)或者间隔之心(setInterval)的函数,但是每次在页面destroy之前,都必须手动清理掉。 正常代码如下: beforeDestroy() { this._timer ...
(1)ES5中,setTimeout里面的函数的执行上下文为全局上下文,举例来说: function log(){ setTimeout(function(){console.log(this.id)},100) } var id=42 log.call({id:21}) //输出的结果为42 我们可以看到...
详解CocosCreator中几种计时器的使用方法 一、setTimeOut 3秒后打印abc。只执行一次。 setTimeout(()=>{console.... setTimeout这样写,test函数中输出的this是Window对象 @ccclass export default class Hell
js代码-setTimeout this指向问题
一、 setTimeout this指向问题 setTimeout(“this.count()”,1000)中的this指的是window对象. js的setTimeout定义为 代码如下: window.setTimeout=function(vCode, iMilliSeconds [, sLanguage]){ //…..代码 return...
代码如下: name = ‘out of you’ foo = function(){ this.name = ‘xxoo’; } foo.prototype.say = function(){ console.log(this.name); } f = new foo(); f.say(); // 这句会输出xxoo setTimeout(f.say, 500); /...
问题: 从第一个页面跳转到第二个页面后,如果停留在第二个页面,定时器还在运行。如果在两个页面之间来回跳转,跳转时间小于... this.ct= setTimeout( () => {that.countdown(end)}, 1000) } end() { clearTimeout
相信大家对着两个函数都陌生,就是一个定时器,setTimeOut只执行一次,而setInterval会重复执行 需要注意的是:在setInterval不用的时候一定要用clearSetInterval关闭定时器。 2.按照最原始的倒计时效果,实现如下:...
3、setTimeout的this指向和参数问题 setTimeout原理 先来看一段代码: var start = new Date(); setTimeout(function(){ console.log(new Date() - start); },500); while(new Date() - start <= 1000
今天在写一个js延时事件的时候发现在setTimeout这个方法里面使用jquery的$(this)竟然不起作用,各种测试,最后得出结论是setTimeout内不支持jquery的选择器。于是请教了一下QQ上做jquery开发的高手,马上就把这问题...
this关键字 每个函数都有一个关键字叫this,在不同的情况下,this代表的内容也是不同的 ... setTimeout(()=>console.log(this)) } } obj.run();//window 3.自调用函数中的this代表window对象 function fn