实现一个new
一个奕 2020年9月7日 16:01 66阅
实现一个new
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一。
如何实现一个new
- 创建一个新的空对象obj
- 将新对象的原型指向当前函数的原型
- 新创建的对象绑定到当前this上
- 如果没有返回其他对象,就返回obj,否则返回其他对象
function _new(constructor, ...arg){
//创建一个空对象
const obj = {};
//把新对象的原型指向当前函数的原型
obj.__proto__ = constructor.prototype;
//新创建的对象绑定到当前this上
const result = constructor.apply(obj, arg);
//如果没有返回其他对象,就返回obj,否则返回其他对象
return typeof result === 'object' ? result : obj;
}
function Foo(name){
this.name = name;
}
let yi = _new(Foo, 'yi');
yi.name;