JavaScript之模拟实现new
new 分析
- new可以实例化一个对象
- 这个对象可以访问构造函数的属性
- 这个对象可以访问构造函数原型上的属性
- 对象的__proto__指向构造函数的原型
- 如果构造函数return回一个对象,那么new操作返回构造函数的return的对象
new 实现
// new可以实例化一个对象
// 这个对象可以访问构造函数的属性
// 这个对象可以访问构造函数原型上的属性
// 对象的__proto__指向构造函数的原型
// 如果构造函数return回一个对象,那么new操作返回构造函数的return的对象
function newFunction() {
let res = {};
// 获取第一参数作为构造函数(构造函数)
let constructor = Array.prototype.shift.call(arguments);
res.__proto__ = constructor.prototype;
// 绑定this,并执行构造函数
let turn = constructor.apply(res, arguments);
return turn ? turn : res;
}