Pull to refresh

Comments 30

Подозреваю, что этот вопрос не дойдёт до адресатов, но мне очень интересно, за что минусы. Если я где-то написал лажу, пожалуйста, скажите мне, где именно. Я на эту статью ещё не раз буду ссылаться. Я не хочу, чтобы в ней была написана лажа.

Здесь часто минусуют материалы, которые "не для самых крутых". Такой вот снобизм!)

Я заметил, что многие свежие статьи сначала уходят в минуса, а потом — в плюса. Допускаю, что "принципиальных минусаторов" меньше, но они реагируют первыми (может с ними в основной жизни мало кто хочет иметь дело из-за их вредности характера, поэтому они больше в интернетах сидят). Со временем появляется большее количество тех, кто может оценить публикацию положительно (что и понятно, люди с мозгами работу работают, а не только на Хабре сидят). Судя по вашему комменту, коллега, вашу статью увели в минуса. Как раз таки те самые, которые вечно недовольны, но сами не знают чем. А судя по тому, что сейчас ваша статья в плюсах, Хабр, в целом, довольно дружелюбная среда ;)

Да нет, статья, кажется, не успела уйти в минус. Но в некоторый момент процент минусов оказался относительно велик, и я удивился. Не мог понять, в чём её противоречивость. Вопрос банальности я как-то забыл рассмотреть)

Имхо всё просто. Многие минуснули глядя на заголовок, не прочитав статью. Так как статей про this в js великое множество — решили понизить мотивацию к повторам.

Я минусы не ставил (и если бы мог — всё равно бы не ставил), но мне тоже давно надоело читать тысячу раз разжёванные вещи. Если новичёк не может нагуглить статью N-летней давность (в которой написано всё то же самое) — это на сто процентов его личные половые трудности.
Ну, я не новичок, но не смог найти статью, в которой всё это было бы разжёвано с достаточной чёткостью. Допустим, я пробовал давать ссылку на MDN, но всё равно оставалось какое-то недопонимание. Я решил использовать свой блестящий талант педагога и публициста (ирония), чтобы вероятность этого недопонимания свести к минимуму.

Но если минусуют за это, то ок, я не против)

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

А кто вас заставляет читать то, что вы уже читали тысячу раз, коллега? Научитесь по заголовку, предисловию и стилю изложения определять, насколько лично для вас будет интересна та или иная информация и как вам её читать — бегло, наискось или отложить на послеобеда и прочесть вдумчиво. Если осознаёте, что читаете банальные вещи, ближе к концу их прочтения, то это на сто процентов ваши личные половые трудности.


Лично я этот справочный материал добавил в закладки, хотя пробежал взглядом наискось. Хорошая систематизация, надеюсь, что ещё и полная.

Я и не читал. Просто мне не нравится, что Хабр заполняется перепечатками ранее изложенного. Пусть даже невольными.

А мне нравится, когда известная мне информация подана в удобном для её осознания виде. Я 20 лет в программировании и уже за ненадобностью забыл больше, чем знаю. Иногда бывает нужно освежить старые знания. В этом случае я очень ценю, когда информацию можно "загрузить" в голову максимально быстро и максимально полно, а не рыскать по всему инету в поисках что и как.


Помните, коллега, как Тринити в Матрице загружала в мозг руководство по управлению вертолётом? А теперь представьте, что ей пришлось шариться по всей Сети в поисках деталей.


Плюс ещё один немаловажный момент — Хабр очень хорошо индексируется Гуглом и в выдаче стоит на верхних позициях. Иногда хорошая перепечатка на Хабре гуглится быстрее, чем даже оригинальная информация ;)

одному Господу известно, чему будет равен this при её вызове

Вот за это и не любят JS. Т.е. нужно в голове держать целый такой алгоритм из 8 пунктов, чтобы в отдельных случаях знать поведение кода.

Вангую замену this на однозначный self или что-то подобное. Как пришлось добавлять === и !==.
UFO just landed and posted this here
Автор молод и не застал использование with в проде. А что там будет, кстати?) неужто this воспримется как имя свойства?
UFO just landed and posted this here

Да, за это и не любят js. Сначала его не изучили, ничего не поняли, увидели что он не похож на другой, привычный яп, получили неожиданные, по их мнению, результаты, удивились, и решили что js неправильный. За это и не любят, за то что его не знают

Вызов функции как конструктора с new приоритетнее, чем вызовы c bind, call и apply.
cheatsheet: new > bind > call/apply > obj.method()
Так. А я не очень могу сообразить, в каком случае у нас может возникнуть вопрос о приоритетах new и call/apply. Приведёте пример?

Вызов уже забинденой функции с помощью 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

Хочу уточнить: лучше для кого? Я всё это уже читал, и не только это. Студенты, как показывает практика, всё равно что-то не догоняют, к тому же не все знают аглицкий.
Потому и «недогоняют» что не знают терминалогию, а она вся английская. Статьи и коментарии на HABR-е могли бы им в этом помочь но многие десь пишут на каком то слэнге какбудто «ботают по фене». Сплошные фьючерсы, тучерсы забиненные… вместо использования професиональных терминов в их исходном англиском написании или русских аналогов, раз уж это пишут наруском.
Я сталкивался с вашей проблемой неопределённости 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();
}
А есть какие-то причины, по которым set и init не лежат в прототипе?
Это просто «виртуальный» пример — как избежать неоднозначности THIS (просто схема). Вместо ключевого слова THIS, имеющего «нехорошую репутацию», используем переменную указатель на объект.
Это актуально для сложных объектов содержащих другие объекты со сложным взаимодействием.
В прототип можно запихнуть всё что угодно, но кладут туда лишь то, что повторяется в других объетах. А если в этих функциях много навороченных действий, в том числе с DOM-объектами и базами данных, наличие какй то «заготовки» в прототипе никакого выиргыша не даёт.
А какой выигрыш даёт написание кода в вашем стиле? Я вижу героическое преодоление собственноручно созданных трудностей.
UFO just landed and posted this here
Шел 2019 год, в мире java script все еще ищут точное значение this… Нет, определенно с этим языком что-то очень сильно пошло не так.
Sign up to leave a comment.

Articles