首先分析一下new操作符的执行过程:
(1)首先创建一个新的空对象
(2)将对象的原型设置为函数的 prototype 对象。
(3)让函数的 this 指向这个空对象,执行构造函数的代码(为这个新对象添加属性)
(4)判断函数的返回值类型,如果是基本数据类型,返回原本创建的对象。如果是引用类型,就返回这个引用类型的对象。
function create(){
let newObject = null //创建一个新的空对象
let constructor = Array.prototype.shift.call(arguments) // 提取形参中第一项,也就是构造函数
if(typeof constructor !== 'function'){ // 判断形参第一项是不是构造函数
return false
}
let result= null
newObject = Object.create(constructor.prototype) // 将新创建对象的__proto__指向constructor的prototype
result = constructor.apply(newObject,arguments) // 将this指向新建对象,并执行constructor
return (result instanceof Object)?result:newObject // 判断返回结果
}
调用
create(构造函数,要初始化的参数)