1

我正在阅读MDN 网站上对 JavaScript 的重新介绍,并在自定义对象部分遇到了这个:

function personFullName() {
    return this.first + ' ' + this.last;
}
function personFullNameReversed() {
    return this.last + ', ' + this.first;
}
function Person(first, last) {
    this.first = first;
    this.last = last;
    this.fullName = personFullName;
    this.fullNameReversed = personFullNameReversed;
}

它在 MDN 网站上说,您可以在 Person 构造函数中引用 personFullName() 和 personFullNameReversed() 函数,只需键入它们的名称并将它们作为值分配给上面代码中所述的两个变量(this. fullName 和 this.fullNameReversed)。这对我来说都很清楚,但我的问题是为什么 personFullName 和 personFullNameReversed 旁边的括号被省略了?不应该说:

this.fullName = personFullName();
this.fullNameReversed = personFullNameReversed();?

它在 MDN 网站的示例中呈现的方式我觉得 Person 构造函数中的那些 fullName 和 fullNameReversed 属性指向一些已经声明的全局变量,而不是在 Person 构造函数之外声明的函数。

4

2 回答 2

5

如果添加括号,您将调用函数并将它们的返回值分配给this.fullNameand this.fullNameReversed

代码是函数,而不是调用它们。

于 2013-05-13T21:14:15.720 回答
3

它是分配功能,而不是功能的结果。它相当于:

function Person(first, last) {
    this.first = first;
    this.last = last;
    this.fullName = function () {
        return this.first + ' ' + this.last;
    };
    this.fullNameReversed = function () {
        return this.last + ', ' + this.first;
    };
}

所以现在你可以这样做:

var jack = new Person('Jack', 'Smith');
console.log(jack.fullName()); // Jack Smith
于 2013-05-13T21:15:25.390 回答