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

Комментарии 17

Классическое наследование очень напоминает то, как люди наследуют гены своих предков.


Очень не напоминает. Гены это не совсем будущая фиксированная конструкция нового организма — это скорее некая «норма реакции на среду». Из одних и тех же генов может много чего разного получится(в основном нежизнеспособного, но тем не менее).

Желание использовать аналогию понятно(виной, вероятно, является использование тех же глаголов), но все примеры слабо выдерживают сравнение с реальностью в силу гораздо более сложного и более интересного механизма генетического наследования в биологических системах.

Применительно к вышеприведенной аналогии:

В биологических системах, наследование генов подразумевает создание новых клеток, ДНК которых никак вообще не связан с родительскими клетками — и поэтому их конечные свойства после деления не зависят от предков.

А то, что автор оригинальной статьи называет «телепатическое» наследование — по сути ближе к «росту» одной и той же структуры, т.к. связь абсолютно явная (через ссылку на прототип) и никакой телепатией там и не пахнет. Просто нужные признаки ищутся по цепочке.

На мой взгляд, используемая аналогия, для конкретного примера крайне неудачная.
Также по поводу «генетического» и «телепатического» наследования. Есть такой язык — Python, в нём ООП самое обычное: есть явное разделение на классы и объекты. Но при этом классы точно так же можно менять в рантайме…

Это генетика или телепатия? :-)
Как передать контекст, в котором выполняется одна функция, другой функции?

С помощью методов call, apply или bind. А устаревший __parent__ означал что-то другое.


Если соблюдены все три этих условия, то доступ к глобальному объекту получить нельзя.

А я-то думал, что глобальные переменные window и self в браузерах доступны… А еще, если говорить о потенциальных возможностях, то всегда можно сделать вот так:


    Object.defineProperty(Object.prototype, "__this__", { get() { return this; } });
    const global = __this__;
// Мелкое копирование

Давайте будем читать, перед публикацией.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Меня больше удивило ключевое слово with в ответе про XHR-запросы, учитывая всеобщий консенсус о нежелательности его использования.

Т.е. у каждого объекта есть, скажем так, «теневая копия» (prototype).
Если свойство задано явно (obj.prop=...), то используется оно. Если нет, то свойство из прототипа. А вот если и оно не задано, то происходит поиск заданного свойства вниз по всем прототипам предков, до ближайшего заданного.

Я правильно понял идею?
Вы как-то больно сложно написали. С самого начала происходит поиск по всем прототипам предков, включая сам объект.
А зачем искать по всем прототипам предков, если свойство явно задано в объекте?
А как узнать, что оно явно задано в объекте, не проводя поиск? :-)
Посмотреть внутрь объекта, не? Мне непонятно, зачем сразу начинать поиск по всем предкам, если оно вот тут вот уже лежит?
Я не спорю с вами, я просто пытаюсь понять логику.
Ну так поиск по цепочке прототипов как раз с самого объекта и начинается. И на нём же и заканчивается, поскольку искомое свойство найдено.
А я разве не ровно вот это же в первоначальном посте написал?
Ровно это же. Но слишком сложно.

"JavaScript: глупости из интернета"

// Не меняйте свойства по одному
element.style.left = "150px;";
element.style.color = "green";

// Меняйте свойства, которые надо модифицировать, за один раз
element.setAttribute ('style', 'color: green; left: 150px');



Нет, их спокойно можно юзать по одному, браузер это отрендерит за один присест. От того и боль, когда из `display: none` нужно появление блока с анимацией делать через `requestAnimationFrame`
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.