要想弄清楚这个问题,一定要知道new()之后发生了什么?
- 创建一个空对象
- 让this指向新对象,执行构造函数的代码,给这个新对象添加属性和方法
- 设置原型链,新对象的__proto__指向构造函数的prototype对象
- 判断:如果传入对象的类型是一个对象,返回新对象;反之,直接返回
function objectFactory() {
const obj = {}; // 创建一个空对象
const Constructor = [].shift.call(arguments);
const result = Constructor.apply(obj, arguments); // 执行构造函数
obj.__proto__ = Constructor.prototype; // 设置原型链
return typeof(result) === Object ? result : obj;
}