function Foo(name){
console.log(arguments);
this.name = name;
}
let a = new Foo('2');
- 创建一个空对象
- 然后让这个空对象的proto 指向构造函数的prototype
- 执行构造函数,将属性或者方法添加到创建的空对象上
- 如果构造函数执行的结果返回的是一个对象,那么返回这个对象;如果不是,返回新创建的对象
function _new(){
// 创建一个空对象
let target = new Object();
let [constructor,...args] = [...arguments];
// 将这个空对象的 __proto__ 指向这个构造函数的prototype
target.__proto__ = constructor.prototype;
// 执行这个构造函数,将属性或者方法添加到创建的对象上
let result = constructor.apply(target, args);
// 如果构造函数创建的不是一个对象,那么返回这个对象
if(result&&typeof (result) == 'function' && typeof (result) == 'object'){
return result;
}
// 如果构造函数函数的不是一个对象,返回创建的新对象
return result;
}
网友评论