Q1主动回忆难度 1
1/12
JavaScript 核心 · 原型与 this
记忆强度
this 指向、call/apply/bind、new 的四步、原型链与继承,面向对象那一套的底座。
JavaScript 核心 · 原型与 this
call、apply 和 bind 在绑定 this、传递参数及返回结果方面有什么区别?三者都能指定函数的 this;call 逐个传参,apply 用数组传参,bind 返回新函数。
myBind 普通调用时用 apply 绑定上下文;new F() 时改为通过 new _this 执行原函数。
寄生组合继承用Object.create(Parent.prototype)替代new Parent(),避免子类原型产生无用的父类属性。
_inherits用Object.create()继承原型方法,并用Object.setPrototypeOf()继承父类静态方法。
new 创建对象、连接构造函数原型并绑定 this、执行构造函数,最后返回对象。
显式返回对象时 new 返回该对象;返回字符串等非对象时返回默认生成的实例。
实例的 __proto__ 指向原型,原型的 constructor 指向构造函数,构造函数的 prototype 指向原型。
JavaScript 先查实例自身,再沿原型链逐级查到 Object.prototype,仍未找到便返回 undefined。
给实例赋值只修改或新增自身属性;修改原型属性会影响所有继承该原型的实例。
直接调用指向 window,对象方法调用指向调用者,new 调用指向新实例。
箭头函数没有自身的 this,它取最近外层普通函数的 this,且不能被 bind 改变。
多次 bind 由第一次绑定决定;优先级依次为 new、bind、对象调用、直接调用。