При кодировании JavaScript иногда Вы храните ссылку объекта this
в локальной переменной в различных целях (чтобы установить надлежащий объем, помочь кодировать obfuscators, и т.д.). Существуют кодеры, которые предпочитают искажать this
кому: that
сделать это очевидным его намерение. Другое использование парней self
так как это указывает на сам объект. Я даже видел исходные коды где me
сохраненный ссылкой и это все еще имеет смысл. Конечно, существуют другие.
Какой я должен предпочесть? Есть ли конвенция, на которой можно использовать или можно быть этим только вопрос вкуса.
Лично я использую , что
, но все остальное, что ясно, нормально.
Я бы не стал использовать self
, потому что глобальная переменная / window
-property self
уже существует как ссылка на window
. Хотя это совершенно бесполезно (так что никого не волнует, что вы за ним следите), он немного увеличивает риск того, что глупые ошибки останутся незамеченными:
var se1f= this; // misspelled (perniciously). or maybe you just forgot to write line
onclick= function() {
self.foo= 1; // whoops, just wrote to `window`!
};
тогда как:
var that= this;
onclick= function() {
that.foo= 1; // error thrown
};
Слегка надуманный, но JavaScript так небрежно допускает ошибки слайд, вы действительно не хотите, чтобы это было так.
В вашей корзине с яблоками есть апельсин, это
имеет очень специфическое контекстное значение. Выбор действительно стоит между я
и я
из этих вариантов. Между тем ... вы выбираете, в любом случае не имеет значения, только личные предпочтения.
this
относится к контексту, в котором вы находитесь, поэтому на самом деле это не вариант, который не вводит путаницу и не допускает ошибок. Я вижу, что self
использовал гораздо больше, чем me
(в примере кода, фреймворков, библиотек и т. Д.). Это просто предпочтение, но я согласен, что я
более привлекателен, не знаю почему ... опять же, просто мое предпочтение.
Что ж, лично я пытаюсь сделать переменную более значимой, чем «то, что мне понадобится позже». Часто вам нужны эти временные переменные в ситуациях, которые становятся немного корявыми; может быть два или более уровней временных тайников this
, которые нужно отслеживать.
Таким образом, например, в настройке jQuery, я мог бы использовать что-нибудь, чтобы отметить тип элемента, который должен содержать временный этот
тайник:
$('form').each(function() {
var $form = $(this);
$form.find('input:checkbox').each(function() {
var $checkbox = $(this);
// ...
});
});
Использование префикса «$» для переменных - хороший вариант. способ отслеживать, был ли объект "jQuery-ized" или нет: -)