2021-04-30 模拟JavaScript中的new new 操作符做了那些事情 创建一个全新的对象 将对象的__proto__指向(链接)构造函数的prototype属性(原型对象) 构造函数通过call或者apply执行,将创建的对象传入,使this指向创建的对象 如果函数没有返回对象类型Object(Function、Array、Data、RegExg、Error),则返回创建的对象的引用 1234567891011121314151617181920function objectFactory () { const obj = new Object() // 获取第一个参数,即构造函数 const Constructor = [].shift.call(arguments) // 更改obj的__proto__为构造函数的原型对象 obj.__proto__ = Constructor.prototype // 执行构造函数,并改变this指向,为obj绑定属性 const ret = Constructor.apply(obj, arguments) // 判断ret类型是否为对象类型,是则返回ret,否则返回obj的引用 return typeof ret === "object" ? ret : obj}function A (name) { this.name = name}const a = objectFactory(A, '张三') // A { name: "test" } Newer 浅谈垃圾回收 Older JavaScript中的事件委托