1. 创立一个对象
2. 执行构造函数,将 this 指向方才创立的对象
3. 如果该构造函数有返回值,且为对象类型,则间接返回该对象
4. 将 obj 的__proto__指向构造函数的 prototype,并将 obj 的__proto__下的 constructor 指向构造函数
5. 返回创立的对象
function newInstance (Fn,...argument) {
// 1. 创立一个空对象
const obj = {}
// 2. 执行构造函数,并将 this 指向 obj
const result = Fn.call(obj,...argument)
// 3. 如果该构造函数的返回值是 Object 类型则返回该对象
if (result instanceof Object) {return result}
// 4. 将 obj 的_proto_指向构造函数的 prototype,并将 obj 的_proto_下的 constructor 指向构造函数
obj.__proto__ = Fn.prototype
obj.__proto__.constructor = Fn
// 返回该对象
return obj
}
function Person (name, age) {
this.name = name
this.age = age
}
Person.prototype.type = 'human'
let person = newInstance(Person,'wade',42)
console.log(person)