2012-02-01 4 views
1

Я учусь яваскрипт и проходил через пример здесь: https://developer.mozilla.org/en/A_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; 
} 
var x = new Person('mickey', 'mouse'); 
document.write(x.fullName()); 

Почему строки кода

this.fullName = personFullName; 
    this.fullNameReversed = personFullNameReversed; 

вместо

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

Я думал, что мы» re this.fullName на основе возвращаемого значения personFullName()

ответ

3

Этот код делает свойства «fullName» и «fullNameReversed» функциями, а не простыми свойствами.

Таким образом, если вы хотите полное имя вы бы написать x.fullName();

функции являются объектами в JavaScript и может быть значение переменных и свойств. Это особенность, которая делает JavaScript неожиданно мощным.

1
this.fullName = personFullName; 

Создает метод под названием fullName, и присваивает ей функцию объявлена ​​как personFullName

Если вы должны были сделать

this.fullName = personFullName(); 

, что бы создать свойство объекта под названием fullName, что на протяжении которого значение personFullName(), произведенное в тот конкретный момент при вызове.

1

personFullName возвращает сама функция (как указатель).

personFullName() возвращает результаты функции.

Это позволяет объекту Person иметь метод, который возвращает полное имя, а не свойство. Если я использую этот объект, например x.first = newVal, метод fullName пересчитывает полное имя.

Если бы это было свойство, я бы использовал его как '' x.first = newVal; x.fullName = newFullName; '.

Надеюсь, это поможет.

Смежные вопросы