1

我不明白为什么在这一行的 changeName 之后没有 () this.chngName = 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);
4

2 回答 2

3

他们在那里所做的是引用该函数而不调用它。

var x = foo;   // Assign the function foo to x
var y = foo(); // Call foo and assign its *return value* to y

在 JavaScript 中,函数是对象。适当的对象。因此,您可以传递对它们的引用。

更多说明:在 JavaScript 中,如果我用括号调用函数会有所不同吗?

于 2013-09-20T13:27:41.783 回答
0

该函数是分配的,而不是调用的。否则myMother.chngName("Doe");无法工作,因为该函数不返回另一个函数。无论如何分配 的返回值是changeName()没有意义的,因为它不返回任何东西(所以它会自动返回undefined)。

更详细的描述:函数是 JavaScript 中的一等对象。这意味着(除了其他一些东西)它们可以像任何其他值/对象一样被传递并分配给任何变量。在这种情况下,构造函数changeName作用域的局部person函数被分配给对象,使其可以从外部使用(实际上,可以从创建的对象可用的任何地方new person())。

于 2013-09-20T13:23:30.960 回答