Как стать автором
Обновить
0
0
Zeroglif @Zeroglif

Пользователь

Отправить сообщение
Рядом просится список сайтов, не использующих jQuery.
jQuery сейчас похожа на церковь, в которую с помощью дурацких примитивных примеров и не менее дурацких увещеваний "про простоту и уникальность" ласково и нежно завлекают прежде всего бедных и несчастных js-ньюбов. А заодно и тех, у кого при острой нехватке времени (или ещё чего) на js-программирование есть время на изучение неоднозначного псевдо-кода-от-дяди-джона, что очевидно проще. Остаётся только сожалеть, что вся эта страсть и энергия, доки и вижуал-апи, туториалы и семинары, и даже книжки не направлены в сторону изучения и пропаганды старого доброго J(ava)Script.
Хех, за "самые доходчивые" спасибо, если кому поможет, то это здесь: http://forum.dklab.ru/viewtopic.php?p=10…

Подавляющее большинство книг по javascript действительно плОхи, и даже не в плане освещения прототипов и наследования, а вообще, в целом. Причём нынешние современные стали ещё хуже. Раньше было много базиса и мало чего-то более глубокого, сейчас - мало базиса, куча ошибок, ужасная терминология и претензия на super-mega-advanced...
Страшно? ;) Картинка мне самому понравилась, только надо было её ещё больше заавангардить, добавив туда все конструкторы. Мои любимые пикчеры находятся здесь (только для людей с крепкой писхикой): http://egachine.berlios.de/embedding-sm-…


Вместо "экземпляры наследуются от прототипа" правильнее "экземпляры наследуют от прототипа".

Вместо "используют прототип объекта на который указывает функция-создатель" правильнее "используют прототип, на который указывает функция-конструктор".

Вместо "функция-создатель" везде по тексту лучше бы "функция-конструктор".

> "Свойство constructor при этом должно быть вручную заменено на другое"

Не обязательно, только если есть в этом острая нужда.
Замена прототипа - это суть игры в наследование в javascript. Перед тем как создать объект-экземпляр мы можем выстроить цепь объектов-прототипов так, как нам нужно, свойства этих объектов по сути станут свойствами экземпляра(ов). Соответственно, после своего создания объект-экземпляр может при необходимости делегировать сообщения своему предку, тот своему и так далее по цепи...

Ну, а ещё прототип переопределяют просто для банального сокращения записи, чтобы не писать 20 раз foo.prototype.x =..., foo.prototype.y = ... пишут инициализатор объекта foo.prototype = {x: 'preved', y: 'medved'}
Намёк уловил. Ну, так если появилась местами безграмотная статья по мотивам местами безграмотной статьи, как тут мимо пройдёшь. Обязательно нужно что-то об этом сказать. Считайте, что миссия такая - навязывать своё ядовитое мнение, не стоит на это так обижаться, заведомо обвиняя кого-то там в неспособности к хабра-труду, комментируя вашу статью, некоторые уже перекрыли её, как в байтах, так и в пользе да здравом смысле...

Блогу javascript доброго здоровья! ;)
Кроме названия статьи приходится читать ещё и саму статью. ;) А там речь не про "просто дополнительный способ использования", а про замену if (не if-else, что ещё куда ни шло, а именно if), про "bitwise" не в тему и т.п. Так что не списывайте всё на многозначительное название, текст говорит сам за себя. А теперь ещё раз прочитаем статью.
Спасибо за внимание.
Я в принципе согласен с вашим посылом, но удобочитаемость не должна рулить. Тернарный оператор или та же запятая - это удобные и понятные операторы, для профессионала они, в принципе, не должны снижать читабельность, отказываться от них глупо. Проблема в программировании ради красоты/компактности/понтов, когда оператор верный а место, куда его засунули чужое.
Владеть языком - это же не значить балаболить в стиле Отара Кушинашвили, где он красиво использует 3 предложения и 4 деепричастных оборота, чтобы сказать "молоко". Владеть языком нужно адекватно поставленной задаче, если вместо ясной и адекватной задаче конструкции -if- начинают использовать в режиме statement тернарный оператор, где false-выход забивается "пустым" значением только для того, чтобы работало, то попробуйте объяснить, где тут смысл и в чём глубокая идея. Я уже молчу про остальные "красиво применённые" конструкции в этой заметке.
Чтоб быть до конца понятым, тернарный сам по себе - это есть хорошо, удобный, компактный оператор. Плохо, когда его начинают использовать в качестве ИФозаменителя, когда при false впустую/неуместно вычисляется какой-нибудь литерал вроде null или 0. Интерпретатор делает ненужную хоть и копеечную работу только для того, чтобы ваше выражение работало. Это к вопросу о "дурацком использовании". Что касается "bitwise", то автор это чудо родил по той причине, что он просто не знает должным образом операторов javascript или выражений, которые могут выполнить ту же задачу. Отсюда и это "нестандартное" решение. С "condition==true" вы уже сами поняли идею...
Пожалуйста, не стоит переходить на личности, какая сейчас разница, кто стоит за ником. Ни мне нет до этого дела, ни вам не должно быть. Это в плане уважения мнения и проч. Теперь о каком охаивании труда вы говорите? Дело даже не в охаивании, а в труде. Вот эта вот коротенькая заметка по мотивам, наполненная сомнительными выводами - это считается трудом? Нельзя этот труд комментировать в критическом ключе? Виноват, больше не буду... ;)
Да, злоупотребляю, люблю знаете ли это дело ;)

Что-то новое - это видимо:

про существование "comma operator" я вообще не знаю, поэтому два выражения, оказывается, можно засунуть в функцию (вау!), а ещё лучше для этого дела использовать "binary bitwise operator" (мама!), и вообще, братцы, на "conditional operator" можно легко заменить не только -if/else- , а и -if- тоже, пускай там на хвостике нолик болтается, зато какая красивая запись получается в итоге:

condition == true ? foo()| bar()| something() : 0;

p.s. это чего за код такой, неужели не видите неуместное использование "equals operator", абсолютно неуместное использование "binary bitwise operator" и совершенно дурацкое использование "conditional operator" в стиле эмуляции "if statement" без -else-?
Сходил почитал оригинал, резюме: автор плавает, пока ещё плохо знает язык, но уже пишет по мотивам своих лабораторных опытов. Ничего не имею против n00bs и их широко открытых глаз, но на мой взгляд, нести чужую аГлицкую песочницу на хабр - это перебор. Его там и свои отлупят... за "bad code" и проч. беллетристику.
Честно говоря, не заметил, чтобы кто-то здесь орал. Тихо ответили, что предложенный вариант не НЕэффективен, а МЕНЕЕ эффективен. Mожете называть это смешным и абсурдным, но это так и есть (во всяком случае это моё такое имхо), или же докажите обратное вместо того, чтобы говорить о совершенной однозначности. Каждый пук чего-то стоит, и мы обязаны знать об этом хотя бы в теории.

В старые добрые времена писать тоже умели. В новые времена полно ужасающего кода (ака классы-в-массы, чем-сложней-тем-умней). ;-)
А где там особый сахар-то? Подсластитель-ксилит на любителя. А если говорить об эффективности и равнозначности, то обратите внимание, что Test.method() - это всё-таки вызов функции, а значит предстоит вычисление аргументов, вычисление this, формирование scope chain и т.д., да и саму функцию (Function.prototype.method) нужно предварительно создать.
Убирать совсем не надо, смысл здешнего обсуждения жалко, лучше добавить резюме или вывод какой по результатам дискуссии...
Не согласен местами. Мне понятен первоначальный посыл про 100 функций и оптимизацию, согласен, но создание свойства/метода непосредственно у объекта и создание наследуемого этим объектом свойства/метода у его прототипа - это в некотором смысле разные вещи, зависит всё от задач. Точно так же кто-то посчитает для себя более правильным отказ от "родного" и переопределение объекта-прототипа сразу же и т.д. и т.п.
Коротко:

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

http://forum.vingrad.ru/index.php?showtopic=120066&view=findpost&p=964268

По поводу необходимости одёргивать начинающих - вы называете малограмотными совершенно нормальные для js вещи. Это раз. А во-вторых, прямо рекомендуете то, что называется "bad code". А в-третьих, в этом "bad code" явно разобрались не до конца. Считайте, что я вас (о)дёрнул. ;-) ;-)
Начало статьи ещё ничего, хотя я бы не стал так категорично называть некоторые вещи "малограмотными" или вещами, которые "делать нельзя", всё это просто разные варианты "заведения" свойств у объектов/их прототипов, каждый имеет свои плюсы/минусы, и само собой каждый имеет право на жизнь, если используется к месту.

Ну, а та часть, где предлагается использовать "with statement" и приводятся какие-то сомнительные примеры наносит реальный вред начинающим и как минимум уводит их в тёмный лес. Судя по тексту про "загадочное поведение" автор статьи "плавает" - не знает точно, как именно работает with, отсюда и ни одного слова о том, что подстерегает программиста при работе с with, и какие вообще рекомендации по работе с with (скорее по НЕ работе с with) уже давным давно выработаны(бытуют) в js-сообществе. Если б знал - не советовал бы...
Основная ошибка и "затык" начинающих — попытка обращаться с прототипами объектов, а не их конструкторов. Ибо прототипов у самих объектов нет.

Как раз ровно наоборот. Объект-прототип у объекта есть.

Тогда откуда берётся «y»? Не найдя этого свойства в самом объекте, машинка обращается к создавшей его функции. Ссылка на неё хранится в каждом объекте, в свойстве «constructor»

Совершенно неправильно. К функции никто не обращается, ссылка на неё в объекте не хранится. Выше дали ссылку на форум dklab (обсуждение наблы), где можно прочитать, почему именно неправильно.
12 ...
17

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность