重写对象的get

讨厌走开啦
博客专家认证
2017-12-13 10:08:54
需求是这样的:获取对象a的b属性,如果b属性存在则直接返回b的值,如果b不存在,则为a对象加上b属性,值为true。即:


let a = {};
a.b;
//此时的a应为{"b":true}


我的思路是需要重写对象a的get方法,默认get一个不存在的属性返回的是undefined,重写以后额外做一个赋值动作。但是昨天晚上试了一晚上也没成功,求各位大佬指点,不胜感激。
...全文
301 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2017-12-13
  • 打赏
  • 举报
回复

let a = new Proxy({}, {
    get: (target, name)=> name in target ? target[name] : true
});

讨厌走开啦 2017-12-13
  • 打赏
  • 举报
回复
to 2楼版主:我的描述可能不够明确,这个b是一个变量:

let a = {};
a.b;
//此时的a应为{"b":true}
a.c;
//此时的a应为{"b":true,"c":true}
也就是说事前是不知道属性名的,也就没法事先写对应的get和set。 to 3楼的兄弟:你想的太简单了,我需要的是的调用a.b的时候你那行代码的逻辑已经隐式执行了。
whidy 2017-12-13
  • 打赏
  • 举报
回复

a.b == undefined ? a.b = true : a.b
Go 旅城通票 2017-12-13
  • 打赏
  • 举报
回复

    var o = { get b() { return this.B===undefined?true:this.B; },set b(v){this.B=v} }
 
    alert(o.b)
    o.b = 123
    alert(o.b)
javascript对象属性get/set读取设置器

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧