目的
给出构造函数foo(),实现一个myNew()函数,使得myNew(foo)等同于new foo()
分析
若定义obj = new foo(),则:
Object.getPrototypeOf(obj) === foo.prototype
实现
function myNew(Constructor, ...args) {
const obj = Object.create(Constructor.prototype);
const result = Constructor.apply(obj, args);
if (isValidResult(result)) {
return result;
}
return obj;
}
function isValidResult(result) {
const resultType = typeof result;
// typeof null === 'object'
return result && (resultType === 'function' || resultType === 'object');
}