如何实现a == 1 && a == 2 && a == 3成立?

根据之前写的文章【JS数据类型转换】(
https://www.toutiao.com/article/7220009788208693820/)可知,可以重写toString或valueOf方法,即可实现该面试题。另外,也可以学习Vue的数据双向绑定 原理,也可实现。

一、采用valueOf或toString,对象进行比较运算时,优先运行valueOf方法,如果得到的不是原始类型数据,则继续运营toString方法,如果得到的 还不是原始类型数据,则报错。

const a = {
    n: 1,
    // valueOf: function () {
    //     return this.n++;
    // },
    toString: function () {
        return this.n++;
    }
}

let a = [1, 2, 3, ];
a.toString = a.shift; // 从开头删除一个

二、采用Object.definePropety,拦截其get方法也可

let n = 1;
Object.defineProperty(window, 'a', {
    get() {
        return n++;
    }
})

三、采用Proxy代理

const a = new Proxy({}, {
    n: 1,
    get: function () {
        return () => this.n++;
    }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值