2011-03-12 2 views
12

Новое на Javascript, чтение Javascript Крокфорд в: The Good Parts (среди прочего)Почему вспомогательные методы часто используются в Javascript?

В 4-й главе о функциях Крокфорд показывает, как сохранить это в внешней функции для использования во внутренних функций, которые я понимаю.

Мой вопрос, в его примере кода и тонны больше нравится, зачем использовать эту вспомогательную функцию:

myObject.double = function() { 
    var that = this; 

    var helper = function() { 
     that.value = add(that.value, that.value); 
    } 
    helper(); 
}; 

ли это возможно потому, что надстройка() сидит в глобальном масштабе, в то время как значение в myObject, поэтому мне нужно скопировать это (myObject), а затем передать в global, где я могу захватить add()?

В противном случае я не уверен, зачем мне нужна вспомогательная функция?

ответ

13

В этом разделе книги он демонстрирует, что при доступе к объекту this родителя функции принято использовать that.

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

+0

Мне было интересно, было ли это всего лишь иллюстрацией этой концепции. Спасибо –

+1

хороший ответ. Думаю, я пропустил «это». – airmanx86

2

Инкапсуляция. В вашем примере helper() существует только в пределах myObject.double(), он не будет доступен/видимым за его пределами. Я считаю, что он называется private method вместо функции «helper».

1

В книге также говорится, что «это связано с неправильным значением». Является ли «неправильное» значение «этого» глобальным объектом? То, как это делает Крокфорд, делает меня неопределенным. Не мог ли он зафиксировать его более знакомым людям с «классическим» фоном, просто вызвав this.helper(), т. Е. Сделать helper() общедоступным методом? Я бы предположил, что да и догадываюсь, что он сделал это так, как он это сделал, чтобы (также) показать обходное решение, которое все еще использует шаблон invokation функции, но хотел бы, чтобы это подтвердилось; будучи новым для javascript, я не уверен, что мои догадки верны.

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