//因为new是关键字,我用函数的形式来实现,可以将构造函数和构造函数的参数传入
function myNew(Fn,...args){
//1.创建一个空对象
const obj={};
//2.并将对象的__proto__指向构造函数的prototype
obj._proto_=Fn.prototype
//3.将构造函数中的this指向obj,执行构造函数代码,获取返回值
const res=Fn.apply(obj,args);
//4.判断返回值类型
return res instanceof Object ?res:obj
}
function _new(obj, ...rest){
// 基于obj的原型创建一个新的对象
const newObj = Object.create(obj.prototype);
// 添加属性到新创建的newObj上, 并获取obj函数执行的结果.
const result = obj.apply(newObj, rest);
// 如果执行结果有返回值并且是一个对象, 返回执行的结果, 否则, 返回新创建的对象
return typeof result === 'object' ? result : newObj;
}
JS实现一个 New操作
于 2022-06-06 10:09:37 首次发布