JS Object属性返回' NaN'关于传递表达

时间:2018-04-22 08:56:09

标签: javascript object

我想将属性年龄分配给对象,我知道可以使用如下函数来完成:

var john = {
         firstName: "John",
         lastName: "Smith",
         job: "Teacher",
         yearOfBirth: 1990,
         family: ['Jane', 'Mark', 'Bob'],
         calculateAge: function() {
            this.age = 2018 - this.yearOfBirth
         }
      }             

   john.calculateAge();

它按预期将属性年龄添加到对象John中。但是没有功能可以做到吗?

当我尝试做以下事情时:

var john = {
             firstName: "John",
             lastName: "Smith",
             job: "Teacher",
             yearOfBirth: 1990,
             family: ['Jane', 'Mark', 'Bob'],
             age: 2018 - this.yearOfBirth
          }

"年龄"财产归还" NaN"。我不知道为什么它没有返回一个数字。这是常规行为(如果'是',那么为什么?)或者我在这里做错了什么?

3 个答案:

答案 0 :(得分:1)

您无法从尚未完成声明的对象中获取任何值。在您编写age: 2018 - this.yearOfBirth时,var john未定义(即使它是,调用上下文也是可疑的 - 可能是全局对象,可能是undefined)。

在初始对象声明之后分配age属性。

答案 1 :(得分:1)

以下情况:

calculateAge: function() {
 this.age = 2018 - this.yearOfBirth
}

john.calculateAge();

this引用john,因为在calculateAge上调用了john

第一个代码:

age: 2018 - this.yearOfBirth

this指的是您在其中创建john对象的当前上下文。

你需要这样写:

var john = {
   firstName: "John",
   lastName: "Smith",
   job: "Teacher",
   yearOfBirth: 1990,
   family: ['Jane', 'Mark', 'Bob']
} 

john.age = 2018 - john.yearOfBirth

答案 2 :(得分:1)

开:

var john = {
             firstName: "John",
             lastName: "Smith",
             job: "Teacher",
             yearOfBirth: 1990,
             family: ['Jane', 'Mark', 'Bob'],
             age: 2018 - this.yearOfBirth
          }

this未在此位置引用您的对象,且尚未声明john

您可以使用以下方法在age存在时定义john属性:

var john = {
             firstName: "John",
             lastName: "Smith",
             job: "Teacher",
             yearOfBirth: 1990,
             family: ['Jane', 'Mark', 'Bob'],
          };        
          john.age = 2018 - john.yearOfBirth;
          
          console.log(john.age);