1.创建了一个空的对象obj
2.将对象和构造函数通过原型链连接起来
3.将构造函数中的this绑定到新建的对象obj上
4.根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理
function Person(name, age) { this.name = name; this.age = age; } function mynew(Func, ...args) { // 1.创建一个空对象obj let obj = {}; // 2.将对象与构建函数通过原型链连接起来 obj.__proto__ = Func.prototype; // 将构建函数中的this绑定到新建的对象obj上 let result = Func.call(obj, ...args); // 根据构建函数返回类型作为判断,如果是原始值则被忽略,如果是返回对象,需要正常处理。 return result instanceof Object ? result : obj; } console.log(mynew(Person, 'zs', 19));
打印结果如下