面试题:new关键字做了什么

2024-01-06 11:05:44

new内部流程

  1. 创建一个新的对象obj

  2. 将obj和构造函数的原型链链接起来(obj.__proto__ === O.prototype)

  3. 将this指向obj,并执行构造函数内部代码

  4. 根据构建函数返回类型作判断,如果是原始值则被忽略,如果是返回对象,需要正常处理。(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;
}

目录

相关推荐
display为inline-block的元素中间有间隙的原因和解决办法面试题:this指向深入理解JS预解析(变量提升和函数提升)引用计数算法闭包