Я спрашиваю об этом с точки зрения языка. Итак, я пытаюсь найтиКаково обоснование поведения ключевого слова 'this' в JavaScript?
- Что является основанием для поведения
this
? - В какой степени поведение
this
было ошибкой или могло быть улучшено?
Чтобы выяснить, почему я неловкость this
, рассмотрим следующий пример:
var a = {};
a.f = function(){ return this; }
var f = a.f;
// f() != a.f()
Обратите внимание, как легко объект, к которому f()
принадлежите теряется: отделена от a
, this
становится глобальным объект (window
для браузеров).
Теперь рассмотрим:
var newA = function(){
var self = {};
self.f = function(){ return self; }
return self;
}
var a = newA();
var f = a.f;
// f() == a.f() !
без использования this
вообще, мы можем установить и поддерживать контекст объекта, независимо от того, где и как метод используется. Я не могу не думать, что, с силой, что затворы обеспечивают, this
становится излишним, и, возможно, даже немного опасно ...
я не на какой-то вендетта против this
, или хотите, чтобы начать спор; Я просто пытаюсь лучше понять это. Я действительно ценю, что «это» может быть полезно, но признать, что it can be confusing также ... Конечно, запутанный для новичков, а может быть, и для экспертов, и в достаточно неясных случаях.
И все же, остается в значительной степени используются и, казалось бы, уважаемая часть языка, в то время, когда другие основные аспекты языка, кажется справедливой игрой для гнушаясь (т.е. Крокфорд и with
или new
). Что мне не хватает тогда, что делает this
незаменимым?
Что создаёт впечатление, что «это» является ошибкой? –
@ Gamecat: Вы никогда не пытались создать язык, похожий на javascript, не так ли? – artificialidiot
Я все еще думаю, что это аргументировано. Язык подразумевает проблему, cf «Как удивительно это« это »(если это потрясающе)» – annakata