doubleyong
管理员
管理员
  • 最后登录2020-10-29
  • 发帖数914
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:330回复:0

[js]Object.defineProperty 与 Proxy 实现a===1&&a===2&&a===3 结果为true

楼主#
更多 发布于:2020-08-13 22:22
现在要实现 (a === 1 && a === 2 && a === 3 ) 结果为true, 不可以重写对象的toString 或 valueOf 的方法就实现了
需要用 Object.defineProperty 劫持数据 或 ES6 Proxy 代理来,实现结果为true

Object.defineProperty实现

使用Object.defineProperty劫持window对象的a属性的getter方法
var value = 1;
Object.defineProperty(window,"a",{
    get(){
     return this.value++;
    }});
if (a === 1 && a === 2 && a === 3){
    console.log("hello world")
}
// 测试结果输出了 "hello world"


利用es6的代理proxy
                         
var value = 1;
let proxy = new Proxy(window, {
   get(target, key, receiver) {
       if(key === 'a') {
           return target.value ++ 
        }  
   }
})
if (a === 1 && a === 2 && a === 3){
 console.log("hello world")
}
// 测试结果也输出了 "hello world"
   

总结:
如果是两个等号==, 主要就是考隐式转换,如果是三个等号===,主要就是考 get 数据劫持,  完了,希望这次主题分享大家会喜欢
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号