js defineProperty 的问题

2017-12-17 22:17:19 +08:00
 yantianqi
<script>
    function Observer(data) {
      this.data = data
      this.walk(data)
    }
    Observer.prototype.walk = function(obj) {
        Object.defineProperty(obj, 'name', {
          get: function() {
            console.log(1111)
            return obj['name']
          }
        })
    }

    var app1 = new Observer({
      name: 'youngwind',
      age: 25
    })
  </script>

为什么会是死循环?想不明白,不就只访问一次吗?

1674 次点击
所在节点    程序员
3 条回复
zjsxwc
2017-12-17 22:24:12 +08:00
死递归吧,获取 name 属性不断递归
dablwow
2017-12-17 22:26:26 +08:00
obj["name"]会访问 get 方法
gumusu
2017-12-18 10:18:31 +08:00
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
看一下下面的 get
get:一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。该方法返回值被用作属性值。默认为 undefined。

你这里,obj['name']被 return 作为 obj['name'] 的值

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/415527

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX