目录
一句话介绍 new
new
运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。(来自MDN)
new 的原理
- 创建一个空的对象
const obj = {};
- 设置 obj._proto_ = Fn.prototype(obj 隐式原型 __proto__ 链接到构造函数 Fn 显式原型 prototype 上)
- 绑定 this 到 obj 上, 执行Fn(构造函数)
- 如果 Fn 返回的不是引用类型,则返回 obj
实现 new
function myNew(Fn, ...args){
const obj = {}
obj.__proto__ = Fn.prototype
const res = Fn.call(obj, ...args)
return ['object', 'function'].includes(typeof res) ? res : obj
}
// 测试代码
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function() {
console.log(this.name)
}
}
// var person = new Person('Jasmine', 31, 'Front-end developer');
var person = myNew(Person, 'Jasmine', 31, 'Front-end developer');
console.log(person.name) // Jasmine
person.sayName(); // Jasmine
console.log(person.__proto__ === Person.prototype); // true