a===1 && a===2 && a===3

weixin_34148340發表於2018-08-26

1. a==1 && a==2 && a==3

  • 利用鬆散相等運算子 == 的原理,自定義toString或者valueOf返回值
let a = {
  value: 0,
  toString() {
    return  ++ a.value
  }
}
console.log(a == 1) //true
console.log(a == 2) //true
console.log(a == 3) //true

2. obj.a===1 && obj.a===2 && obj.a===3

2.1 劫持js物件的getter

  • 若obj物件為window物件,則可實現 a===1 && a===2 && a===3
let obj = {
  value: 1
}
Object.defineProperty(obj,'a', {
  get() {
    return this.value ++
  }
})
console.log(obj.a === 1) // true
console.log(obj.a === 2) // true
console.log(obj.a === 3) // true
2.2利用es6的代理proxy
let obj = {
  value: 1
}
let proxy = new Proxy(obj, {
  get(target, key, receiver) {
    if(key === 'a') {
      return target.value ++
    } 
  }
})
console.log(obj.a === 1) // true
console.log(obj.a === 2) // true
console.log(obj.a === 3) // true

相關文章