Javascript 这个代码有问题吗?有人能解释一下这是怎么回事吗

Javascript 这个代码有问题吗?有人能解释一下这是怎么回事吗,javascript,javascript-objects,Javascript,Javascript Objects,这段代码来自JS课程中的sololearn.com function person(name, age) { this.name= name; this.age = age; this.yearOfBirth = bornYear; } function bornYear() { return 2016 - this.age; } this.yearOfBirth=bornYear

这段代码来自JS课程中的sololearn.com

function person(name, age) {
  this.name= name;  
  this.age = age;
  this.yearOfBirth = bornYear;
}
function bornYear() {
  return 2016 - this.age;
}
this.yearOfBirth=bornYear
是不是出生了


这是如何工作的?

bornYear
是一个函数

bornYear()
是burnYear函数返回的值,等于
2016 this.age

如果
this.yearOfBirth=bornYear

this.yearOfBirth=bornYear
表示您分配
this.yearOfBirth=function(){return 2016 this.age}

然后让我们假设
var me=newperson(“john”,16)
您可以调用
me.yearOfBirth();//2000年

如果
this.yearOfBirth=bornYear()
,会发生什么


当您声明
var me=new person(“john”,16)
bornYear()已执行
return 2016 this.age
但this.age未定义,因此返回未定义。然后,
this.yearOfBirth=undefined

我想这个版本会帮助你更好地理解,可能是老师想要写的:

职能人员(姓名、年龄){
this.name=name;
这个。年龄=年龄;
this.getYearOfBirth=函数bornYear(){
2016年回归-此年龄段;
};
}
1-始终将Pascale case与将被视为类的函数一起使用,这就是我将
person
重命名为
person
的原因。这提高了可读性和易混淆性

2-我将
出生年
重命名为
getYearOfBirth
,我同意老师也应该在这里给孩子起个更好的名字。开发者习惯性地使用动词来访问器(get/set)或方法(compute、parse、find…)

3-
bornYear
是类中的函数,因此定义了访问器。由于调用
bornYear
时不使用
new
运算符,因此
将等同于
窗口
作为默认绑定

请自己尝试,在浏览器中打开javascript控制台并键入以下内容:

function t(){console.log(this);}

t()
返回
窗口
,全局/默认范围

new t()
返回新创建的上下文
t

function person(name, age) {
  this.name= name;  
  this.age = age;
  this.yearOfBirth = bornYear;
}
function bornYear() {
  return 2016 - this.age;
}

var p = new person("A", 22);
document.write(p.yearOfBirth());
这段代码解释了这一点

创建一个新对象(新建)

使用yearOfBirth是因为它返回一个值

如果你检查这个值,它应该是什么


(糟糕的解释)

那么bornYear是出生年份属性吗?如何在函数中使用此.age?上下文
person
中分配时传递给
bornYear
函数bornYear本身就是一个函数。我们使用这个函数来定义对象构造函数的方法。因此,bornYear是一个函数,而this.yearOfBirth是一个方法。你可以想象,bornYear只是一个字符串,我们将它传递给this.yearOfBirth是的,我同意这没有意义,因为变量名
yearOfBirth
表明值是int(没有用于命名的动词),这显然是一个函数。。。但是可以,您可以将一个函数分配给对象的一个字段,稍后再调用它:
var p=newperson('John',20);var-dob=p.bornYear()``函数Person(name,age){this.name=name;this.age=age;this.getYearOfBirth=function bornYear(){return 2016-this.age;};}x=Person.getYearOfBirth console.log(x)``我没有定义,为什么会这样?@user13806962,因为您需要实例化该类,以便
将指向一个新的上下文。函数中的逻辑随后成为类构造函数,并将在实例化时使用
new
执行。请尝试
函数Person(name,age){this.name=name;this.age=age;this.getYearOfBirth=function bornYear(){return 2016-this.age;};}var instance=new Person();var x=instance.getYearOfBirth;控制台日志(x)