Закрытия JavaScript внутри объектов: какой псевдоним должен иметь «this» для передачи в анонимную функцию? - PullRequest
2 голосов
/ 25 июня 2010

Мы обсудили с нашей командой следующее: какое правильное имя должно иметь переменную, которая будет псевдонимом «this» в анонимной функции.Простой пример:

var SomeConstructor = function() {

    this.someProperty = 'bingo';

    this.someMethod = function() {

        var myObjectAlias = this;

        $('a').click(function() {
            alert( myObjectAlias.someProperty );                  
        });

    }
}

Итак, мой вопрос: какое правильное имя должно иметь переменную "myObjectAlias"?Или что использовалось в вашем коде например?

Ответы [ 5 ]

6 голосов
/ 25 июня 2010

Вы видите много примеров кода.

var that = this;

$('a').click(function() {
         alert( that.someProperty );                  
});

Для этого; это действительно не имеет значения, что вы хотите.

2 голосов
/ 25 июня 2010

Я склонен использовать self в этих случаях, или _self, чтобы быть явным, имеет значение , равное this без конфликтов, что делает вещи простыми и интуитивно понятными, по крайней мере для меня.

Например:

self.property
self.doSomething()
if(self.hasPickles) {
  self.eat();
}

Это, конечно, вопрос предпочтений, но большинство 1011 * разработчиков JS, с которыми я говорил, считают этот стиль именования интуитивно понятным, это не значит, что это делает большинство, но это не так. не важно ли это? Делай, что работает для твоей команды :)

0 голосов
/ 25 июня 2010

по касательной: рассмотрите возможность использования прототипов для вашего конструктора:

var SomeConstructor = function() {}
SomeConstructor.prototype = {

    someProperty: 'bingo',

    someMethod: function() {   
        var self = this;    
        $('a').click(function() {
            alert( self.someProperty );                  
        });    
    }
}

Свойства someProperty и someMethod могут совместно использоваться всеми экземплярами, поэтому они прекрасно работают таким образом. Всякий раз, когда вам нужны отдельные значения для каждого экземпляра, вы должны поместить их в сам конструктор.

0 голосов
/ 25 июня 2010

Я предпочитаю использовать self по причинам, описанным Ником Крейвером.

0 голосов
/ 25 июня 2010

Я думаю, иногда полезно использовать значимые имена, такие как «форма», «контейнер» или что-то еще.Короче говоря, небольшие блоки кода не так уж и сложны, но в сложных инициализациях для форм или диалогов существует множество разных «интересных» объектов, гудящих вокруг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...