Комментарии 30
Здесь часто минусуют материалы, которые "не для самых крутых". Такой вот снобизм!)
Я заметил, что многие свежие статьи сначала уходят в минуса, а потом — в плюса. Допускаю, что "принципиальных минусаторов" меньше, но они реагируют первыми (может с ними в основной жизни мало кто хочет иметь дело из-за их вредности характера, поэтому они больше в интернетах сидят). Со временем появляется большее количество тех, кто может оценить публикацию положительно (что и понятно, люди с мозгами работу работают, а не только на Хабре сидят). Судя по вашему комменту, коллега, вашу статью увели в минуса. Как раз таки те самые, которые вечно недовольны, но сами не знают чем. А судя по тому, что сейчас ваша статья в плюсах, Хабр, в целом, довольно дружелюбная среда ;)
Имхо всё просто. Многие минуснули глядя на заголовок, не прочитав статью. Так как статей про this в js великое множество — решили понизить мотивацию к повторам.
Но если минусуют за это, то ок, я не против)
А кто вас заставляет читать то, что вы уже читали тысячу раз, коллега? Научитесь по заголовку, предисловию и стилю изложения определять, насколько лично для вас будет интересна та или иная информация и как вам её читать — бегло, наискось или отложить на послеобеда и прочесть вдумчиво. Если осознаёте, что читаете банальные вещи, ближе к концу их прочтения, то это на сто процентов ваши личные половые трудности.
Лично я этот справочный материал добавил в закладки, хотя пробежал взглядом наискось. Хорошая систематизация, надеюсь, что ещё и полная.
А мне нравится, когда известная мне информация подана в удобном для её осознания виде. Я 20 лет в программировании и уже за ненадобностью забыл больше, чем знаю. Иногда бывает нужно освежить старые знания. В этом случае я очень ценю, когда информацию можно "загрузить" в голову максимально быстро и максимально полно, а не рыскать по всему инету в поисках что и как.
Помните, коллега, как Тринити в Матрице загружала в мозг руководство по управлению вертолётом? А теперь представьте, что ей пришлось шариться по всей Сети в поисках деталей.
Плюс ещё один немаловажный момент — Хабр очень хорошо индексируется Гуглом и в выдаче стоит на верхних позициях. Иногда хорошая перепечатка на Хабре гуглится быстрее, чем даже оригинальная информация ;)
одному Господу известно, чему будет равен this при её вызове
Вот за это и не любят JS. Т.е. нужно в голове держать целый такой алгоритм из 8 пунктов, чтобы в отдельных случаях знать поведение кода.
Вангую замену this на однозначный self или что-то подобное. Как пришлось добавлять === и !==.
Да, за это и не любят js. Сначала его не изучили, ничего не поняли, увидели что он не похож на другой, привычный яп, получили неожиданные, по их мнению, результаты, удивились, и решили что js неправильный. За это и не любят, за то что его не знают
cheatsheet: new > bind > call/apply > obj.method()
Вызов уже забинденой функции с помощью call не изменит this. Не верно сформулировал мысль.
new > bind
Слушайте, а вы имеете в виду, что если забинденную функцию вызвать как конструктор, у неё this всё-таки изменится?
Есть хороший ресурс:
HTML. The language for building web pages
там есть раздел:
JavaScript Tutorial
с подробным описанием всех элементов языка и итерактивными примерами для каждого элемента.
И в частности по мучающим вас вопросам:
www.w3schools.com/js/js_this.asp
www.w3schools.com/js/js_function_call.asp
www.w3schools.com/js/js_function_apply.asp
www.w3schools.com/js/js_const.asp
Я сталкивался с вашей проблемой неопределённости THIS при написании сложнонавороченных объектов. Её удалось решить введением в констрактор объектов локальной переменной SELF которой присваивал значение THIS и использовал её в теле методов объекта.
Примерно так:
function createObjectxxx(a, b, c){
this.properti1 = null;
this.properti2 = null;
this.properti3 = null;
var self = this;
this.set = function (d, e, f) {
self.properti1 = d;
self.properti2 = e;
self.properti3 = f;
};
this.init = function(){
self.set (a, b, c)
}
this.init();
}
Это актуально для сложных объектов содержащих другие объекты со сложным взаимодействием.
В прототип можно запихнуть всё что угодно, но кладут туда лишь то, что повторяется в других объетах. А если в этих функциях много навороченных действий, в том числе с DOM-объектами и базами данных, наличие какй то «заготовки» в прототипе никакого выиргыша не даёт.
Ключевое слово this в JavaScript. Полное* руководство