Устранение неоднозначности этого во внутренних функциях

#javascript

#javascript

Вопрос:

Иногда внутренним функциям необходимо ссылаться на this внешнюю функцию. Есть ли в JavaScript широко используемая идиома для такого? Я придумал решение, включающее присвоение this другой переменной:

 Object.defineProperty(Array.prototype, 'set', {
    enumerable: false,
    value: function (a) {
        this.length = 0
        var this1 = this
        a.forEach(function (x) {
            this1.push(x)
        })
    }
})
  

Но я не уверен, является ли это самым чистым или наиболее идиоматичным решением.

Ответ №1:

Я лично использую that в качестве имени переменной вместо this1 , но в остальном это чистый, обычный и идиоматический Javascript.

Дуглас Крокфорд, похоже, также рекомендует использовать that .

По соглашению, мы делаем эту переменную закрытой. Это используется, чтобы сделать объект доступным для частных методов. Это обходной путь для ошибки в спецификации языка ECMAScript, которая приводит к неправильной настройке этого параметра для внутренних функций.

В прошлом я также видел, как люди использовали self .

Комментарии:

1. Я лично использую self , поскольку мне это кажется более описательным, чем that , но, очевидно, это просто личное предпочтение, какое имя вам нравится. Что более важно, так это выбрать соглашение и придерживаться его, чтобы ваш код был последовательным. Если вы работаете с кодом, написанным другими людьми, используйте их соглашение, чтобы сохранить согласованность.

2. @jfriend00 1 полностью согласен. Главное — согласованность.