Javascript 这个代码有问题吗?有人能解释一下这是怎么回事吗
这段代码来自JS课程中的sololearn.comJavascript 这个代码有问题吗?有人能解释一下这是怎么回事吗,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
function person(name, age) {
this.name= name;
this.age = age;
this.yearOfBirth = bornYear;
}
function bornYear() {
return 2016 - this.age;
}
this.yearOfBirth=bornYear为什么bornYear只是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)代码>