1 创建一个空对象
2 将该对象的原型链接到要创建的对象上
3 将构造函数的作用域赋值给新对象,即this指向这个新对象
4 如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。
function person(name, age) {
this.name = name
this.age = age
}
person.prototype.show = function () {
console.log(`${this.name},${this.age}`)
}
function _new(fn, ...arg) {
var obj = {}
obj.__proto__ = fn.prototype
let res = fn.apply(obj, arg)
return res instanceof Object ? res : obj
}
let tom = new person('tom', 18)
console.log(tom)
tom.show()
let perter = _new(person, 'perter', 220)
console.log(perter)
perter.show()