1. new关键字
new关键字可以创建实例对象
2. 构造函数的理解
function extend(name,age){
this.name = name;
this.age = age;
}
- 原本的构造函数是window对象的方法,如果不用new操作符而直接调用,那么构造函数的执行对象就 是window,即this指向了window
- 当调用 extend('henry',25) 时,可以在window身上找到对应的 name 和 age
- 现在用 new 操作符后,this 就指向了新生成的对象,可以在新生成的对象身上找到对应的 age 和 name
3. new关键字的执行过程
new 关键字内部干了如下三件事(已知构造函数为Func)
- 创建一个空对象,并使该空对象继承 Func.prototype
- 执行构造函数,并将this指向刚刚创建的新对象
- 返回新对象
可以看到在使用new关键字的时候改变了this指向,这也就是为什么使用new操作符后,对应的属性不再挂载到window身上,而是新的实例对象身上
4. new 关键字源码实现
根据 new 关键字的执行过程,我们可以简单实现出一个new关键字
export function _new(Fn, ...args) {
// 1. 创建一个空对象
const obj = {};
// 2. 执行构造函数,并将 this 指向刚刚创建的对象
co