V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yantianqi
V2EX  ›  程序员

js defineProperty 的问题

  •  
  •   yantianqi · 2017-12-17 22:17:19 +08:00 · 1671 次点击
    这是一个创建于 2532 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <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>
    

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

    3 条回复    2017-12-18 10:18:31 +08:00
    zjsxwc
        1
    zjsxwc  
       2017-12-17 22:24:12 +08:00 via Android
    死递归吧,获取 name 属性不断递归
    dablwow
        2
    dablwow  
       2017-12-17 22:26:26 +08:00
    obj["name"]会访问 get 方法
    gumusu
        3
    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'] 的值
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1114 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 23:29 · PVG 07:29 · LAX 15:29 · JFK 18:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.