new 做了什么?
- 在构造器内部创建一个新的对象
- 这个对象内部的隐式原型指向该构造函数的显式原型
- 让构造器中的 this 指向这个对象
- 执行构造器中的代码
- 如果构造器中没有返回对象,则返回上面的创建出来的对象
手写 new 的过程
new 是一个运算符,只能通过函数的方式去模拟
<script> function Person(name, age) { this.name = name; this.age = age; } // 使用 kaimoPerson 函数去模拟 new 运算符 function kaimoPerson(fn, ...args) { // 1) 创建一个对象 let obj = {}; // 2) 让对象的隐式原型指向 fn 的显式原型 obj.__proto__ = fn.prototype; // 3) 改变 this 指向;4) 执行 fn fn.apply(obj, args); // 5) 返回对象 return obj; } let p1 = new Person("kaimo", 313); console.log("p1---->", p1); let p2 = kaimoPerson(Person, "kaimo", 313); console.log("p2---->", p2); </script>