【JS】手写内置函数或方法

目录

1.instanceof 方法

2.Object.is() 方法


1.instanceof 方法

(1)功能

        判断所有引用数据类型,并返回布尔值。

(2)原理

        {} instanceof Object // true

        判断方法右边构造函数的原型是否在左边对象的原型链上。

(3)代码

        

function myInstanceof(left, right){
    if(typeof left !== 'object' && typeof left !== 'function' || left === null) return false;
    let proto = Object.getPrototypeOf(left);
    let prototype = right.prototype;
    while(true) {
        if(!proto) return false;
        if(proto === prototype) return true;
        proto = Object.getPrototypeOf(proto);
    }
}

2.Object.is() 方法

(1)功能

        判断两个值是否为同一个值,返回布尔值。

(2)原理

        Object.is(+0, -0) // false

        一般和===相同,也有特殊情况,如+0与-0不再相等,两个NaN是相等的。

(3)代码

function myIs(value1, value2) {
    if(value1 === value2) {
        // 都不为0或为符号相同的0时返回true
        return value1 !== 0 || 1/value1 === 1/value2;
    } else {
        // 都为NaN时返回true
        return value1 !== value1 && value2 !== value2; 
    }
}

3.new 方法

(1)功能

        创建实例对象并返回该实例对象。

(2)代码

function myNew(func, ...args) {
    // 第一步:新建一个对象
    let obj = {};
    // 第二步:将构造函数的作用域赋给新对象
    obj.__proto__ = func.Prototype;
    // 第三步:改变this指向,给新对象添加属性方法
    let result  = func.apply(obj, args);
    return typeof result === 'object' ? result : obj;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值