看代码和注释:

class MyClass{
    constructor(){
        this.name="NAME";
    }
    callback(){
        console.log(this.name);
    }
    do(){
        //可以正常输出NAME
        this.callback();
        
        //也可以正常输出NAME
        let doback = this.callback.bind(this);
        doback();

        //报错,在函数赋值后this上下文关系丢失
        doback = this.callback;
        doback();
    }
}

let obj = new MyClass();
obj.do();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

由此可知,如果将类的方法赋值给一个变量,或者作为参数传给使用方,这方法内的this将失去上下文环境。