-
new 调用构造函数时发生了什么?
(1) 创建一个对象
(2) 将 this 指向这个对象
(3) 为对象添加属性和方法
(4) 最终返回新的对象
-
如果构造函数中显式返回一个值,且返回的是一个对象(返回复杂类型),那么 this 就指向这个对象。如果返回的不是一个对象(返回基本类型), 那么 this 仍然指向实例
// 1. 显式返回对象 function Foo() { this.user = 'sun'; const o = {}; return o; } const instance = new Foo(); console.log(instance.user); // undefined // 2. 显式返回的不是对象 function Foo2() { this.user = 'sun'; const o = {}; return 1; } const instance2 = new Foo2(); console.log(instance2.user); // sun -
显式绑定和隐式绑定
显式绑定:bind、apply、call、new
隐式绑定:根据调用关系确定 this 指向
-
call、apply 的显示绑定一般来说更高, new 绑定的优先级比显式 bind 绑定的更高, 箭头函数的绑定无法更改。