面试题:new关键字做了什么
2024-01-06 11:05:44new内部流程
创建一个新的对象obj
将obj和构造函数的原型链链接起来(obj.__proto__ === O.prototype)
将this指向obj,并执行构造函数内部代码
根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理。(new 关键词执行之后总是会返回一个对象,要么是实例对象,要么是 return 语句指定的对象)
手写new
function create(fn, ...args) {
let obj = Object.create(fn.prototype);
let res = fn.apply(obj, args);
return res instanceof Object ? res : obj;
}