你不知道的JS this小结
1. this只跟调用者有关,和this所在的函数声明没有关系。this不可以访问词法作用域,不可能在多个方法间传递引用建立桥梁。
2. this的四个规则
1. 默认绑定。没有明确的调用对象。默认是全局对象在非严格模式下,严格模式下为undefined且与调用点的模式无关和函数声明本身模式相关。
2. 隐含绑定。在对象声明时的引用或者后来添加的引用,并不是真正的引用,要看调用时的对象。在函数被调用的时间点上“拥有”或“包含”这个函数引用。而且只有对象属性引用链的最后一层是影响调用点的。
其中要注意隐含绑定丢失。 还是要看调用点在哪里。调用点是一个直白的毫无修饰调用的时候,隐含绑定丢失,使用默认绑定。
3. 明确绑定。硬绑定,call(..), apply(..), bind(...)
4. new绑定
使用new运算符发生的事情
1. 一个新的对象会被创建
2. 新的对象会加入原形链
3. 将当前的this指向新的对象
4. 将返回新创建的对象,除非指定返回其他对象
四个规则的优先级顺序:new绑定>明确绑定>隐含绑定>默认绑定
3. 特殊情况 箭头函数从封闭它的作用域开始this绑定,绑定不能被覆盖,new运算符也不可以。
创建对象和生成原型链的几种方式:
1. 语法结构
2. 构造器创建对象,new运算符
3. Object.create()
4. class关键字创建对象