new操作符做了什么
new 操作符新建了一个空对象,这个对象原型指向构造函数的 prototype,执行构造函数后返回这个对象
- 创建一个空的对象{}
- 链接到原型(将空对象的原型 prototype 指向构造函数的原型)
- 绑定 this 指向,执行构造函数
- 对构造函数有返回值的判断
# 实现
- 让实例可以访问到私有属性
- 让实例可以访问构造函数原型(constructor.prototype)所在原型链上的属性
- 如果构造函数返回的结果不是引用数据类型
/*
newFactory函数要接受不定量的参数,第一个参数是构造函数(也就是new操作符的目标函数),其余参数被构造函数使用。
new Create() 是一种js语法糖。我们可以用函数调用的方式模拟实现
*/
function newFactory(ctor, ...args) {
// 判断是不是函数
if(typeof ctor !== 'function'){
throw 'newOperator function the first param must be a function';
}
//1、创建一个空的对象
let obj = new Object();
//2、将空对象的原型prototype指向构造函数的原型
obj.__proto__ = Object.create(ctor.prototype);
//3、改变构造函数的上下文(this),并将剩余的参数传入
let res = ctor.apply(obj, [...args]);
//4、在构造函数有返回值的情况进行判断
let isObject = typeof res === 'object' && typeof res !== null;
let isFunction = typoof res === 'function';
return isObect || isFunction ? res : obj;
};
编辑 (opens new window)
上次更新: 2024/11/29, 10:10:04