JavaScript从构造函数中调用方法

时间:2013-05-13 21:12:15

标签: javascript function methods constructor custom-object

我正在阅读MDN网站上的re-introduction to 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构造函数之外声明的函数。

2 个答案:

答案 0 :(得分:5)

如果您添加括号,则会调用这些函数并将其返回值分配给this.fullNamethis.fullNameReversed

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

答案 1 :(得分: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