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

108 阅读1分钟

根据之前写的文章【JS数据类型转换】(
www.toutiao.com/article/722… 原理,也可实现。

一、采用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++;
    }
})