[英]What is this line of Js code exactly doing?
我正在学习JavaScript中的对象,并且正在使用一个函数来构造对象并向其中添加方法。 很明显,有一种方法可以更改对象的名字,但是this.changeName = changeName;行的内容是什么?
到底是做什么的? 如果删除它或将changeName函数名称更改为其他名称,则会发生错误,并且不会显示任何内容。 删除这一行代码也会导致错误,因此看来运行代码至关重要,但我真的不知道它能做什么。
<script>
function person(firstName, lastName, age){
this.firstName=firstName;
this.lastName=lastName;
this.age=age;
this.changeName=changeName;
function changeName(name){
this.firstName=name;
}
}
me = new person("Hazem", "Khadash", 18);
me.changeName("Bashar");
document.write(me.firstName);
据我了解的代码,创建了我,将changeMe()函数作为方法调用,然后将person.lastName呈现在屏幕上。
谢谢。
您正在将changeName
作为person
一部分进行访问。 将其视为公开changeName
。
没有它,您将无法执行me.changeName
因为me.changeName
不再存在于person
范围之外。
function person(firstName, lastName, age) {
...
function changeName(name){
this.firstName=name;
}
}
创建一个仅在功能person
内部可用的功能。 正如您所发现的那样,只有那样会使me.changeName(…)
无法正常工作,因为该函数无法在person
外部访问。
this.changeName = changeName
使该功能可以在person
功能之外访问,因此您以后可以调用me.changeName
。
请注意,它是this.changeName = changeName
,而不是this.changeName = changeName()
。 使用括号,它将调用该函数并将其输出分配给this.changeName
; 不带括号,它将对功能changeName
的引用分配给this.changeName
。
您可以将其更改为此,这将是等效的:
function person(firstName, lastName, age) {
...
this.changeName = function(name){
this.firstName=name;
}
}
将您的person
写成“班级”的最佳方法可能是这样的:
function person(firstName, lastName, age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
person.prototype.changeName = function changeName(name){
this.firstName = name;
};
您可能已经在Javascript中听说过,所有东西都是对象。 当您在职能人员之内时,您也就在“对象中”。 因此,这是指对象。 在此函数中声明嵌套函数将使其仅在函数上下文中可见,而在其他任何地方都不可见。 要使其可用于外部世界,您必须将其分配给对象字段,否则无法从外部调用它。 如果您熟悉面向对象的编程,则可以将其视为类的方法(JS中没有真正的类)。
同样的事情是:
function person(firstName, lastName, age){
this.firstName=firstName;
this.lastName=lastName;
this.age=age;
this.changeName = function(name){
this.firstName=name;
}
}
当您在人员实例的范围内调用此方法时。 “ this”总是指该特定实例。
一个可以总结为:
this.changeName = changeName; ->将仍未定义的本地对象changeName分配给对象字段changeName
函数changeName(name)->将本地对象changeName声明为一个函数。
请记住-在JavaScript中,一切都是对象函数,变量,数组,...
在javascript中,可以将变量分配为数字或字符串。 在这种特殊情况下,将名为changeName
的person
属性分配给功能changeName
。 通过此分配,您可以changeName
此探测来调用changeName
函数( me.changeName("Bashar");
)
没有那行代码,您可以在person对象的范围内调用changeName(name)函数。 但是使用该行代码,您可以从范围外部调用该函数,例如朝底部的行:me.changeName(“ Bashar”)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.