手写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(构造函数, 初始化参数);
相关推荐
a努力。几秒前
京东Java面试被问:Fork/Join框架的使用场景
java·开发语言·面试
毕加锁6 分钟前
深度解析昇腾Catlass:C++模板元编程与高性能算子开发范式(1)
开发语言·c++
Swift社区21 分钟前
用 RN 的渲染模型,反推 Vue 列表的正确拆分方式
前端·javascript·vue.js
光影少年23 分钟前
前端开发桌面应用开发,Flutter 与 Electron如何选?
javascript·flutter·electron
鹿野素材屋24 分钟前
帧同步场景下的确定性随机数生成:基于时间戳的固定种子设计与实践
java·开发语言
Violet_YSWY25 分钟前
Vue-Pinia defineStore 语法结构
前端·javascript·vue.js
全栈陈序员25 分钟前
v-if 和 v-for 的优先级是什么?
前端·javascript·vue.js·学习·前端框架·ecmascript
小真zzz25 分钟前
当前集成Nano Banana Pro模型的AI PPT工具排名与分析
开发语言·人工智能·ai·powerpoint·ppt
float_六七29 分钟前
Java JAR包运行与反编译全攻略
java·开发语言·jar
我是伪码农35 分钟前
动态表格案例
前端·javascript·html