@mypcluna 如果把 (obj.make = obj.make)(); 等号左边的 obj.make 当成一个变量 确实很容易理解。
似乎被 等号左边的 obj.make 骗了。
这个例子可能更直观一些。。
new A(); 执行时 (this.show = b.show)(); 可以理解为
首先 this.show = b.show; //此时 this.show 被赋值为一个函数
然后执行 (this.show)();
但是在执行 (this.show = b.show)(); 的 (this.show)(); 时
感觉 this.show 函数的 this 指针还没有替换成 A 就被执行了
所以返回了 window 对象
所以感觉 (this.show = b.show)(); 和 直接 (this.show)(); 似乎有本质的不同
//不是说过 (this.show)(); 是 this.show(); 的另一种写法吗 0 0~
//(this.show = b.show) 是赋值表达式 (this.show) 是匿名函数表达式 ?
一个等号引起的血案
所以 "把函数用于赋值,this就会丢失" 这个简单明了。
//this就会丢失 应该理解为 等号左边的 this.show 的 this 指针丢失 ?
这个问题有点钻牛角尖 但是仅限于 (this.show = b.show)(); 这种情况。
分步运行时 this.show 的 this 指针完全没有问题。
也算是了了一桩心事 (握抓~