我想将属性年龄分配给对象,我知道可以使用如下函数来完成:
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"。我不知道为什么它没有返回一个数字。这是常规行为(如果'是',那么为什么?)或者我在这里做错了什么?
答案 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);