我正在学习javascript中的对象,我正在使用一个函数来构造一个对象并为其添加一个方法。很明显,有一种方法可以改变对象的firstName,但该行是什么
的 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。
感谢。
答案 0 :(得分:2)
您将changeName
作为person
的一部分进行访问。将其视为公开changeName
。
如果没有它,则不能me.changeName
me.changeName
person
不再存在{{1}}范围之外。
答案 1 :(得分:1)
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;
};
答案 2 :(得分:1)
正如您可能已经在Javascript中听到的,一切都是对象。当你在功能人员中时,你也是“在对象”中的人。所以这指的是对象。在此函数中声明嵌套函数使其仅在函数的上下文中可见,而不是在其他任何位置。要使它可用于外部世界,您必须将其分配给对象字段,否则您无法从外部调用它。您可以将其视为类的方法(JS中没有真正的类) - 如果您熟悉面向对象的编程。
同样的事情是:
function person(firstName, lastName, age){
this.firstName=firstName;
this.lastName=lastName;
this.age=age;
this.changeName = function(name){
this.firstName=name;
}
}
在person实例的范围内调用此方法时。 “this”总是指那个特定的例子。
可以总结一下:
this.changeName = changeName; - &GT;将仍未定义的本地对象changeName分配给object-field changeName
function changeName(name) - &gt;声明本地对象changeName为函数。
记住 - 在JavaScript中,一切都是对象函数,变量,数组......
答案 3 :(得分:0)
在javascript函数中,可以将变量分配为数字或字符串。在此特定情况下,名为person
的{{1}}属性被赋值为函数changeName
。通过此分配,您可以通过此探测(changeName
)
changeName
函数
答案 4 :(得分:0)
如果没有这行代码,您可以在范围内的中调用changeName(name)函数。但是使用该行代码,您可以从作用域的外部调用该函数,例如底部的行:me.changeName(“Bashar”)。