我不明白为什么在此行this.chngName = changeName;
上的changeName之后没有()。我的逻辑是this.chngName
被赋值给函数返回,函数末尾有一个()。谢谢你回答。
function person(firstname, lastname, age, eyecolor) {
this.firstname = firstname;
this.lastname = lastname;
this.age = age;
this.eyecolor = eyecolor;
this.chngName = changeName;
function changeName(name) {
this.lastname = name;
}
}
myMother = new person("Sally", "Rally", 48, "green");
myMother.chngName("Doe");
document.write(myMother.lastname);
答案 0 :(得分:3)
他们在那里做的是指没有调用它的功能。
var x = foo; // Assign the function foo to x
var y = foo(); // Call foo and assign its *return value* to y
在JavaScript中,函数是对象。适当的对象。所以你可以传递给他们的参考。
更多说明:In JavaScript, does it make a difference if I call a function with parentheses?
答案 1 :(得分:0)
分配功能,而不是调用。否则myMother.chngName("Doe");
无法正常工作,因为该函数不会返回另一个函数。分配changeName()
的返回值无论如何都没有意义,因为它不会返回任何内容(因此它会自动返回undefined
)。
更详细的说明:函数是JavaScript中的第一类对象。这意味着(除了其他一些东西)它们可以像任何其他值/对象一样传递并分配给任何变量。在这种情况下,changeName
构造函数范围的本地函数person
被分配给对象,使其可以从外部(实际上,从{{1创建的对象的任何地方)可用)。