目录
1. new的四个步骤
创建一个空对象→这个新对象继承原函数的原型→更改this指向,为对象设置属性→返回新对象
1.创建一个空对象
var obj={}
2.这个新对象继承原构造函数的原型
obj._proto_=Constructor.prototype
3.更改this指向,为对象设置属性
let result=Constructor.apply(obj,...args)
4.返回新对象
return result instanceof Object ? result : obj
2.new的实现过程
function myNew(constrc, ...args) {
// 1. 创建一个空对象
const obj = {};
// 2. 将obj的_proto_属性指向构造函数的原型对象
obj.__proto__ = constrc.prototype;
// 3.将constrc执行的上下文this绑定到obj上,并执行
const result = constrc.apply(obj, args);
//4. 如果构造函数返回的是对象,则使用构造函数执行的结果。否则,返回新创建的对象
return result instanceof Object ? result : obj;
}
3.例子
function Person(name, age){
this.name = name;
this.age = age;
}
Person.prototype.sayHello=function(){
console.log("hello"+this.name)
}
const person1 = myNew(Person, 'Tom', 20)
console.log(person1) //Person {name: "Tom", age: 20}
person1.sayHello() //helloTom