标题new原理的实现(javascript)
1. 话不多说直接上代码
// 实现 new
// new 操作的执行过程
// 1. 首先创建一个新的空对象
// 2. 设置原型, 将对象的原型设置为函数的 prototype 对象
// 3. 让函数的this指向这个对象, 执行构造函数的代码(为这个新对象添加属性)
// 4. 判断函数的返回值类型, 如果是值类型, 返回创建的对象; 如果是引用类型, 就
// 返回这个引用类型的对象
function newFactory() {
let constructor = arguments[0]
let obj = Object.create(constructor.prototype) // 等同于 obj.__proto__ = constructor.prototype
let args = Array.from(arguments).slice(1)
let result = constructor.apply(obj, args)
return result instanceof Object ? result : obj
}