手写 promise 代码中,关于作用域执行上下文的问题求解?

看网上手写promise,看到这个部分就看不懂了

    class MyPromise{
        constructor(func){
            this.state = 'PENDING';
            console.log(this.state,'11')
            func(this.resolve.bind(this))
        }
        resolve(){
            this.state = 'REJECTED'
        }
        then(){
            return new MyPromise(res=>{
                console.log(this.state,'22')
            })
        }
    }

    new MyPromise(res=>{
        res()
    }).then()

打印:image.png

为什么state赋值了PENDING,回调里state=REJECTED

阅读 2.3k
2 个回答

看图

image.png

image.png

箭头函数没有自己的 this 。它里面的 this 是包含它的函数的 this 。包含它的函数时 then 。于是里面的 this 并不是你新创建的 promise ,而是原来那一个。

        then(){ // <--- this 是这里的 this
            return new MyPromise(res=>{
                console.log(this.state,'22')
            })
        }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏