Подтвердить что ты не робот

Что, я или я - какой из них предпочтительнее в JavaScript?

При кодировании JavaScript иногда вы сохраняете ссылку объекта this в локальной переменной для разных целей (чтобы установить правильную область действия, чтобы помочь обфускаторам кода и т.д.). Есть кодеры, которые предпочитают сглаживание this до that, чтобы сделать очевидным его намерение. Другие парни используют self, поскольку он указывает на сам объект. Я даже видел исходники, где me держал ссылку, и это все еще имеет смысл. Конечно, есть и другие.

Какой из них я должен предпочесть? Существует ли конвенция, по которой можно использовать или это только вопрос вкуса.

4b9b3361

Ответ 1

Я лично использую that, но все остальное, что ясно, прекрасно.

Я бы не использовал self, потому что глобальная переменная /window -property self уже существует как ссылка на window. Хотя это абсолютно бесполезно (поэтому никто, вероятно, не заботится о том, чтобы вы его затеняли), это немного увеличивает риск глухих ошибок, которые не замечаются:

var se1f= this;         // mis-spelled (perniciously). or maybe you just forgot to write line
onclick= function() {
    self.foo= 1;        // whoops, just wrote to `window`!
};

тогда:

var thot= this;
onclick= function() {
    that.foo= 1;        // error thrown
};

Немного надуманный, но JavaScript настолько неряшлив, что позволяет сделать ошибки слайдами, вы действительно не хотите этого делать.

Ответ 2

Там есть оранжевый в вашей корзине с яблоками, this имеет очень специфическое контекстуальное значение. Выбор действительно между self и me этих параметров. Между теми... вы выбираете, это не имеет значения в любом случае только для личных предпочтений.

this относится к контексту вашего входа, поэтому он не является действительно "опцией", не введя много путаницы и легко сделать ошибки. Я вижу, что self используется гораздо больше, чем me (в примере кода, фреймворки, библиотеки и т.д.). Это просто предпочтение, но я согласен, что self более привлекателен, не уверен, почему... снова просто мое предпочтение.

Ответ 3

Хорошо, лично я пытаюсь улучшить положение переменной, означающей нечто большее, чем "то, что мне нужно позже". Часто вам нужны эти временные переменные в ситуациях, которые кажутся немного грубыми; для отслеживания можно использовать два или несколько слоев временных задержек this.

Таким образом, например, в настройке jQuery я могу использовать что-то, чтобы отметить тип элемента, который должен содержать временный this stash:

$('form').each(function() {
  var $form = $(this);
  $form.find('input:checkbox').each(function() {
    var $checkbox = $(this);
    // ...
  });
});

Использование префикса $$ для переменных - хороший способ отслеживать, был ли объект "jQuery-ized" или нет: -)