要想弄清楚这个问题,一定要知道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
;
}