`
weick
  • 浏览: 69168 次
  • 性别: Icon_minigender_1
  • 来自: 天堂的隔壁
社区版块
存档分类
最新评论

setTimeout中的this

    博客分类:
  • js
 
阅读更多

 

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):

 




 

 

  • 大小: 21.6 KB
分享到:
评论

相关推荐

    详解JS中定时器setInterval和setTImeout的this指向问题

    最近在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,详细的介绍通过一个示例展开,一起来看看吧。 如下例: var num = 0; function Obj (){ ...

    解决vue的变量在settimeout内部效果失效的问题

    解决方法如下: 1、定义一个self暂存this 2、再改变变量的值,则生效啦 var self=this;...当在vue中使用定时器来修改一个变量值的时候,发现没有效果,这是由于setTimeout函数调用的代码运行在与所

    Javascript对象中关于setTimeout和setInterval的this介绍

    在Javascript里,setTimeout和setInterval接收第一个参数是一个字符串或者一个函数,当在一个对象里面用setTimeout延时调用该对象的方法时 代码如下: function obj() { this.fn = function() { alert(...

    VUE中setTimeout和setInterval自动销毁案例

    在Vue的大型单页应用中,在某个路由下,经常会出现需要延迟执行(setTimeout)或者间隔之心(setInterval)的函数,但是每次在页面destroy之前,都必须手动清理掉。 正常代码如下: beforeDestroy() { this._timer ...

    JS ES6中setTimeout函数的执行上下文示例

    (1)ES5中,setTimeout里面的函数的执行上下文为全局上下文,举例来说: function log(){ setTimeout(function(){console.log(this.id)},100) } var id=42 log.call({id:21}) //输出的结果为42 我们可以看到...

    【JavaScript源代码】详解CocosCreator中几种计时器的使用方法.docx

    详解CocosCreator中几种计时器的使用方法  一、setTimeOut 3秒后打印abc。只执行一次。 setTimeout(()=>{console.... setTimeout这样写,test函数中输出的this是Window对象 @ccclass export default class Hell

    js代码-setTimeout this指向问题

    js代码-setTimeout this指向问题

    js setTimeout 常见问题小结

    一、 setTimeout this指向问题 setTimeout(“this.count()”,1000)中的this指的是window对象. js的setTimeout定义为 代码如下: window.setTimeout=function(vCode, iMilliSeconds [, sLanguage]){ //…..代码 return...

    javascript中setTimeout的问题解决方法

    代码如下: 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); /...

    解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题

    问题: 从第一个页面跳转到第二个页面后,如果停留在第二个页面,定时器还在运行。如果在两个页面之间来回跳转,跳转时间小于... this.ct= setTimeout( () => {that.countdown(end)}, 1000) } end() { clearTimeout

    vue 解决setTimeOut和setInterval函数无效报错的问题

    相信大家对着两个函数都陌生,就是一个定时器,setTimeOut只执行一次,而setInterval会重复执行 需要注意的是:在setInterval不用的时候一定要用clearSetInterval关闭定时器。 2.按照最原始的倒计时效果,实现如下:...

    setTimeout学习小结

     3、setTimeout的this指向和参数问题 setTimeout原理 先来看一段代码: var start = new Date(); setTimeout(function(){ console.log(new Date() - start); },500); while(new Date() - start <= 1000

    setTimeout内不支持jquery的选择器的解决方案

    今天在写一个js延时事件的时候发现在setTimeout这个方法里面使用jquery的$(this)竟然不起作用,各种测试,最后得出结论是setTimeout内不支持jquery的选择器。于是请教了一下QQ上做jquery开发的高手,马上就把这问题...

    javascript之this详解

    this关键字 每个函数都有一个关键字叫this,在不同的情况下,this代表的内容也是不同的 ... setTimeout(()=>console.log(this)) } } obj.run();//window 3.自调用函数中的this代表window对象 function fn

Global site tag (gtag.js) - Google Analytics