在set中不能再去赋值,obj.name = val
这个语句首先触发了get,然后赋值又触发了set,set又执行obj.name = val
,于是就无限调用了
而且你写的这个get也会导致无限调用,因为obj.name
会触发get
一般要定义defineProperty都需要借助一个外部变量:
let name;
let obj = {};
Object.defineProperty(obj,"name",{
get(){ return name },
set(val){ name=val }
})
已参与了 SegmentFault 思否社区 10 周年「问答」打卡 ,欢迎正在阅读的你也加入。
8 回答4.6k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
楼上说得对。正确的用法是在外部设置一个变量