1、创建一个空对象
2、将空对象的原型链指向该构造函数的原型链
3、执行构造函数,将this绑定到空对象中
4、根据构造函数的返回值做判断,若是原始数据则忽略,若是对象的话则正常返回处理,若没有默认返回this
代码语言:javascript复制function Foo(name, age) {
this.name = name;
this.age = age;
// 如果这里返回了一个基本数据,或者没有返回值,就返回当前实例对象
// 如果这里返回了一个对象,则返回该对象
}
console.log(new Foo('zs', 23))
// 创建一个类似new操作符的函数
function newTest(Fn, ...arg) {
let obj = {};
Object.setPrototypeOf(obj, Fn.prototype);
let res = Fn.apply(obj, arg);
return res instanceof Object ? res : obj
}
console.log(newTest(Foo, 'lisi', 18))