что, я или я - какой предпочитать в JavaScript? - PullRequest
19 голосов
/ 23 апреля 2010

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

Какой из них я предпочитаю?Есть ли соглашение по использованию или это только вопрос вкуса.

Ответы [ 3 ]

44 голосов
/ 23 апреля 2010

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

Я бы не стал использовать 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 настолько неаккуратный, позволяющий ошибкам скользить, и вы больше не хотите этого делать.

2 голосов
/ 23 апреля 2010

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

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

1 голос
/ 23 апреля 2010

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

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

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

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

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