new对象时内部做了什么?
1.创建一个新对象;
2.该对象执行[[Prototype]](即__proto__)链接;
3.将构造函数的作用域赋值给新对象(this指向该新对象);
4.执行构造函数中的代码(给该对象添加属性、方法);
5.若无显式返回对象或函数,才返回新对象。
function newFn(fn, ...args) {
// 1.创建一个新对象
const obj = {}
// 2.将fn的原型链复制道对象的原型链上
obj._proto_ = fn.prototype
// 3.修改fn函数的this并执行
const res = fn.apply(obj, args)
// 4.如果fn的返回值是一个对象则返回,如果是非对象则返回obj
return typeof res === 'object' ? res : obj
}
const f2 = newFn(fn, '参数')