分享
三行代码  ›  专栏  ›  技术社区  ›  learning...

在javascript对象中正确使用此选项[重复]

  •  0
  • learning...  · 技术社区  · 1 周前

    在下面的示例中,如何访问 enums.ROCK 在道具里面?从目前的情况来看,我得到了一个错误 Uncaught TypeError: Cannot read property 'enums' of undefined . Plz检查注释 ERROR LINE .

    const app = {
      enums: {
        ROCK: 'ROCK',
        PAPER: 'PAPER',
        SCISSORS: 'SCISSORS',
        DEFAULT_USER_CHOICE: this.ROCK //default, take note of this keyword
      },
      prop: {
        isGameRunning: false,
        mySelection: this.app.enums.ROCK //ERROR LINE
      }
    };
    

    我试过了 mySelection: app.enums.ROCK 在这种情况下,我得到 Uncaught ReferenceError: Cannot access 'app' before initialization .

    样本1: https://jsfiddle.net/5zp7yode/

    样本2: https://jsfiddle.net/5zp7yode/1/

    如果以下工作没有任何问题

    var person = {
      firstName: "John",
      lastName : "Doe",
      id       : 5566,
      fullName : function() {
        return this.firstName + " " + this.lastName;
      }
    };
    
    alert(person.fullName());
    

    样本3: https://jsfiddle.net/0o93afLq/

    我也尝试了以下操作,但仍然无法访问prop中的枚举。

    const app = {
      self: this,
      enums: {
        ROCK: 'ROCK',
        PAPER: 'PAPER',
        SCISSORS: 'SCISSORS',
        DEFAULT_USER_CHOICE: this.ROCK //default, take note of this keyword
      },
      prop: {
        isGameRunning: false,
        mySelection: self.enums.ROCK
      }
    };
    
    alert(app.prop.mySelection);
    

    样本4: https://jsfiddle.net/x89kj2zn/

    另一个函数,但我不能调用 prop

    const app = {
      enums: {
        ROCK: 'ROCK',
        PAPER: 'PAPER',
        SCISSORS: 'SCISSORS',
        DEFAULT_USER_CHOICE: this.ROCK //default, take note of this keyword
      },
      prop: {
        isGameRunning: false
      },
      getMySelection: function(){
        return app.enums.ROCK;
      }
    };
    alert(app.getMySelection());
    

    样本5: https://jsfiddle.net/v5qzdx3s/

    1 回复  |  直到 1 周前
        1
  •  1
  •   whitehat    1 周前

    你可以利用 get .

    const app = {
      enums: {
        ROCK: 'ROCK',
        PAPER: 'PAPER',
        SCISSORS: 'SCISSORS',
        get DEFAULT_USER_CHOICE(){
          return app.enums.ROCK
        }
      },
      prop: {
        isGameRunning: false,
        get mySelection(){
          return app.enums.ROCK
        }
      }
    };
    
    console.log(app)