参考:https://zhuanlan.zhihu.com/p/26540168
1. 定义对象方法JS 中对象方法的定义方式是在对象上定义一个指向函数的属性,当方法被调用的时候,方法内的 this 就会指向方法所属的对象。
1.1 定义字面量方法
错误示范:
calculator.sum 使用箭头函数来定义,但是调用的时候会抛出 TypeError,因为运行时 this.array 是未定义的,调用 calculator.sum 的时候,执行上下文里面的 this 仍然指向的是 window,原因是箭头函数把函数上下文绑定到了 window 上,this.array 等价于 window.array,显然后者是未定义的。
解决的办法是,使用函数表达式来定义方法,确保 this 是在运行时是由包含它的上下文决定的
这样 calculator.sum 就变成了普通函数,执行时 this 就指向 calculator 对象,自然能得到正确的计算结果。
1.2 定义原型方法
同样的规则适用于原型方法(prototype method)的定义,使用箭头函数会导致运行时的执行上下文错误