• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yantianqi
V2EX  ›  程序员

js defineProperty 的问题

  •  
  •   yantianqi · Dec 17, 2017 · 2075 views
    This topic created in 3094 days ago, the information mentioned may be changed or developed.
    <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 replies    2017-12-18 10:18:31 +08:00
    zjsxwc
        1
    zjsxwc  
       Dec 17, 2017 via Android
    死递归吧,获取 name 属性不断递归
    dablwow
        2
    dablwow  
       Dec 17, 2017
    obj["name"]会访问 get 方法
    gumusu
        3
    gumusu  
       Dec 18, 2017
    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'] 的值
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   864 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.