【问题标题】:Accessing calculated property in javascript object访问 javascript 对象中的计算属性
【发布时间】:2022-01-10 18:22:23
【问题描述】:

当我直接访问年龄属性时,为什么控制台打印未定义。我必须先打印 calcAge 函数才能获取值。

const Osama = {
    firstName: 'osama',
    lastName: 'Shaikh',
    birthyear: 1999,
    job: 'developer',
    friends: ['michael', 'peter', 'steven'],
    haslicense: true,
    calcAge: function () {
        this.age = 2021 - this.birthyear;
        return this.age;
    },

};
console.log(Osama.age);

【问题讨论】:

    标签: javascript function object javascript-objects


    【解决方案1】:

    您似乎希望为 age 属性分配一个 getter

    const Osama = {
      birthyear: 1999,
    
      get age() {
        console.log('in getter');
        return 2021 - this.birthyear;
      },
    };
    
    console.log(Osama.age); // in getter, 22
    console.log(Osama.age); // in getter, 22

    或者,要仅在首次访问时计算年龄并将其替换为静态属性,您可以使用 self-overwriting getter。

    const Osama = {
      birthyear: 1999,
      
      get age() {
        console.log('in getter');
        delete this.age;
    
        return (this.age = 2021 - this.birthyear);
      },
    };
    
    console.log(Osama.age); // in getter, 22
    console.log(Osama.age); // 22

    【讨论】:

      【解决方案2】:

      该对象的开头没有 age 属性。

      只有在运行 calcAge 方法时才分配它。

      【讨论】:

      • 谢谢你再问一个问题,如果我在 calcAge 之前给对象年龄属性,比如这个年龄:2037 - this.birthyear,在同一个对象中,当我尝试访问birthyear 的值时,它给了 Nan
      猜你喜欢
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2023-03-31
      相关资源
      最近更新 更多