- 创建一个新的空对象
- 设置这个对象的原型链为被new的prototype
- 把参数传入被new的对象并且绑定this
- 如果返回的是一个对象则直接返回对象,如果返回的是基本数据类型则忽略。
function create(Con, ...args) {
const obj = {}
Object.setPrototypeOf(obj, Con.prototype); // obj.__proto__ = Con.prototype
const result = Con.apply(obj, args)
return result instanceof Object ? result : obj
}