(1)var obj = new Fun() 做了三件事
var obj = {} // 创建一个空对象 obj.__proto__ = Fun.prototype //空对象的__proto__指向构造函数的原型对象 Fun.call(obj) // 构造函数this指向替换成obj
(2)实现一个new
function _new(fn, ...arg) { const obj = Object.create(fn.prototype); const ret = fn.apply(obj, arg); // 根据规范,返回 null 和 undefined 不处理,依然返回obj,不能使用 // typeof result === 'object' ? result : obj return ret instanceof Object ? ret : obj; }