JAVASCRIPT: 在 document.write() 中调用函数后得到 NaN 结果
JAVASCRIPT: Getting NaN result after calling function in document.write()
我正在尝试使用以下代码获取 bornYear 作为结果,但结果为 NaN。
function person(name, age){
this.name = name;
this.age = age;
this.yearOfBirth = bornYear;
}
function bornYear(){
return 2020 - this.age;
}
document.write(bornYear());
我在这里缺少什么?
试试这个:
function bornYear(){
return 2020 - parseInt(this.age);
}
您没有创建 person
的实例,也没有调用该实例的 属性:
bornYear
引用 this
,这似乎是一个 person
实例,因此您必须以某种方式将 this
绑定到它。
- 正如您定义的 属性
yearOfBirth
,调用 那个 方法是合适的。
此外,您的 bornYear
函数仅限于 2020 年。您应该使用 当前 年份,使用 Date
构造函数。
这是它的工作原理:
function person(name, age){
this.name = name;
this.age = age;
this.yearOfBirth = bornYear.bind(this); // bind this
}
function bornYear(){
// Use the current year to calculate year of birth
return new Date().getFullYear() - this.age;
}
// First create an instance, then call the method
document.write(new person("Helen", 18).yearOfBirth());
虽然在原型上定义这样的方法并以大写 (Person
) 开头的构造函数名称更为常见。
此外,在这种情况下使用 document.write
是不好的做法。使用 console.log
.
标准的方式是这样的:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
bornYear() {
return new Date().getFullYear() - this.age;
}
}
console.log(new Person("Helen", 18).bornYear());
您似乎混淆了面向对象编程和函数式编程风格。如果您想像现在这样使用 this
,则必须执行以下操作:
function Person(name, age) {
this.name = name;
this.age = age;
this.yearOfBirth = () => {
return new Date().getFullYear() - this.age;
};
}
let newPerson = new Person('Foo', 25);
document.write(newPerson.yearOfBirth());
我正在尝试使用以下代码获取 bornYear 作为结果,但结果为 NaN。
function person(name, age){
this.name = name;
this.age = age;
this.yearOfBirth = bornYear;
}
function bornYear(){
return 2020 - this.age;
}
document.write(bornYear());
我在这里缺少什么?
试试这个:
function bornYear(){
return 2020 - parseInt(this.age);
}
您没有创建 person
的实例,也没有调用该实例的 属性:
bornYear
引用this
,这似乎是一个person
实例,因此您必须以某种方式将this
绑定到它。- 正如您定义的 属性
yearOfBirth
,调用 那个 方法是合适的。
此外,您的 bornYear
函数仅限于 2020 年。您应该使用 当前 年份,使用 Date
构造函数。
这是它的工作原理:
function person(name, age){
this.name = name;
this.age = age;
this.yearOfBirth = bornYear.bind(this); // bind this
}
function bornYear(){
// Use the current year to calculate year of birth
return new Date().getFullYear() - this.age;
}
// First create an instance, then call the method
document.write(new person("Helen", 18).yearOfBirth());
虽然在原型上定义这样的方法并以大写 (Person
) 开头的构造函数名称更为常见。
此外,在这种情况下使用 document.write
是不好的做法。使用 console.log
.
标准的方式是这样的:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
bornYear() {
return new Date().getFullYear() - this.age;
}
}
console.log(new Person("Helen", 18).bornYear());
您似乎混淆了面向对象编程和函数式编程风格。如果您想像现在这样使用 this
,则必须执行以下操作:
function Person(name, age) {
this.name = name;
this.age = age;
this.yearOfBirth = () => {
return new Date().getFullYear() - this.age;
};
}
let newPerson = new Person('Foo', 25);
document.write(newPerson.yearOfBirth());