关于Promise中this的指向问题?
代码
class Dog {
constructor() {
this.name = 'adong';
}
start() {
this.p().then(this.say);
}
p() {
return new Promise((resolve, reject)=>{
resolve('good');
})
}
say(str) {
console.log(this);
console.log(this.name + str);
}
}
let dog = new Dog();
dog.start();
题目描述
say
方法单独调用时没有问题的,但是在Promise
的then
里面再调用this
就变为undefined
了,哪个大神帮忙分析一下,谢谢!
错误显示
undefined
(node:5784) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'name' of undefined
at say (D:\NodeJS\Test\test2.js:18:22)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你上面的调用写法,其本质就是:
promise的then方法传入的是一个回调函数参数!所以 then(this.say)实质只是将this.say作为一个参数使用,所以不存在this
1>. 回调函数为匿名函数时,回调函数的this会指向window,需要对回调函数bind(this)。
2>. 回调函数为箭头函数时,回调函数的this会指向他的直接上层,本例中指向dog。