为了账号安全,请及时绑定邮箱和手机立即绑定

为什么this.func不是函数?(构造函数内的方法,在构造函数内调用,提示这个方法不是函数)

为什么this.func不是函数?(构造函数内的方法,在构造函数内调用,提示这个方法不是函数)

慕哥6287543 2018-09-03 12:15:26
function Bird(name){    this.name = name;    this.sayName = function(){        console.log('hello '+this.name +' guys');     }     setTimeout(function(){       this.sayName();     },1000);  }var a = new Bird(); a.sayName();Uncaught TypeError: this.sayName is not a function我指setTimeout上调用的this.sayName().如果它指window对象上没有sayName函数我还能理解,但是去掉this.sayName()后面的括号后浏览器就没出现错误提醒了。为什么我脑子短路了
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

首先,异步函数运行的时候,this已经不是当前对象了,而是window,所以setTimeout里面的this.sayName其值为undefined

然后,去掉括号之后仅仅表示取出这个引用的值,但是并不会对它做任何操作。
如果这个值不存在,那么取出的值就是undefined,然后就这么完了,当然也就不会出错。

你可以把这里改成这样,然后你再运行看看是什么结果:

setTimeout(function(){   console.log(this.sayName);
},1000);


查看完整回答
反对 回复 2018-10-21
  • 1 回答
  • 0 关注
  • 410 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号