手写instanceof、手写new操作符

文章目录

  • [1 手写instanceof](#1 手写instanceof)
  • [2 手写new操作符](#2 手写new操作符)

1 手写instanceof

  • instanceof:用于判断构造函数的prototype属性是否出现在对象原型链中的任何位置
  • 实现步骤:
    1. 获取类型的原型。
    2. 获取对象的原型。
    3. 一直循环判断对象的原型是否等于构造函数的原型对象,直到对象原型为null。
javascript 复制代码
function myInstanceof(left, right) {
    let proto = Object.getPrototypeOf(left);
    let prototype = right.prototype;
    while (true) {
        if (proto == null) return false;
        if (proto === prototype) return true;
        proto = Object.getPrototypeOf(proto);
    }
}

2 手写new操作符

  • 调用new:
    1. 创建一个空对象。
    2. 将对象的原型设置为构造函数的prototype。
    3. 让构造函数的this指向这个对象,执行构造函数的代码,为这个新对象添加属性。
    4. 判断函数的返回值类型,如果是值类型,返回创建的对象,如果是引用类型,返回引用类型的对象。
javascript 复制代码
function myNew() {
    let newObject = null;
    let result = null;
    let constructor = Array.prototype.shift.call(arguments);
    if (typeof constructor !== "function") {
        console.error("type error");
        return;
    }
    newObject = Object.create(constructor.prototype);
    result = constructor.apply(newObject, arguments);
    let flag = result && (typeof result === "object" || typeof result === "function");
    return flag ? result : newObject;
}
myNew(构造函数, 初始化参数);
相关推荐
笨笨马甲几秒前
Qt TCP连接硬件设备
开发语言·qt·tcp/ip
四瓣纸鹤1 分钟前
F2图表在Vue3中的使用方法
前端·javascript·vue.js·antv/f2
建群新人小猿8 分钟前
陀螺匠企业助手-我的日程
android·大数据·运维·开发语言·容器
それども8 分钟前
浏览器CSR和SSR渲染区别
javascript·lua
shanLion9 分钟前
从 iframe 到 Shadow DOM:一次关于「隔离」的前端边界思考
前端·javascript
superman超哥9 分钟前
仓颉借用检查器工作原理深度解析
c语言·开发语言·c++·python·仓颉
OpenTiny社区12 分钟前
Vue2/Vue3 迁移头秃?Renderless 架构让组件 “无缝穿梭”
前端·javascript·vue.js
鱼鱼块13 分钟前
二叉搜索树:让数据在有序中生长的智慧之树
javascript·数据结构·面试
敲代码的独角兽13 分钟前
当 Web Worker 遇上异步,如何突破单线程限制?
javascript
一生躺平的仔15 分钟前
Nestjs 风云录:前端少侠的破局之道
javascript