Mark24
记录灵感、技术、思考
JavaScript中new一个对象发生了什么
new的过程
创建一个空的简单JavaScript对象(即{});
链接该对象(即设置该对象的构造函数)到另一个对象 ;
将步骤1新创建的对象作为this的上下文 ;
如果该函数返回值是对象类型则返回对象,没有返回对象就返回创建的对象
function myNew (myConstructor, ...args) {
const obj = Object.create(myConstructor.prototype)
const result = myConstructor.apply(obj, args)
// 这是一个标准的 (result && typeof result === 'object') 判断是非null的对象的写法
// 如果 result是对象就返回对象,如果不是就返回创建的obj 这是一个关键
if (result && typeof result === 'object') return result
return obj
}