Что, я или я - какой из них предпочтительнее в JavaScript?
При кодировании JavaScript иногда вы сохраняете ссылку объекта this
в локальной переменной для разных целей (чтобы установить правильную область действия, чтобы помочь обфускаторам кода и т.д.). Есть кодеры, которые предпочитают сглаживание this
до that
, чтобы сделать очевидным его намерение. Другие парни используют self
, поскольку он указывает на сам объект. Я даже видел исходники, где me
держал ссылку, и это все еще имеет смысл. Конечно, есть и другие.
Какой из них я должен предпочесть? Существует ли конвенция, по которой можно использовать или это только вопрос вкуса.
Ответы
Ответ 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" или нет: -)