Комментарии 17
Классическое наследование очень напоминает то, как люди наследуют гены своих предков.
Очень не напоминает. Гены это не совсем будущая фиксированная конструкция нового организма — это скорее некая «норма реакции на среду». Из одних и тех же генов может много чего разного получится(в основном нежизнеспособного, но тем не менее).
Желание использовать аналогию понятно(виной, вероятно, является использование тех же глаголов), но все примеры слабо выдерживают сравнение с реальностью в силу гораздо более сложного и более интересного механизма генетического наследования в биологических системах.
Применительно к вышеприведенной аналогии:
В биологических системах, наследование генов подразумевает создание новых клеток, ДНК которых никак вообще не связан с родительскими клетками — и поэтому их конечные свойства после деления не зависят от предков.
А то, что автор оригинальной статьи называет «телепатическое» наследование — по сути ближе к «росту» одной и той же структуры, т.к. связь абсолютно явная (через ссылку на прототип) и никакой телепатией там и не пахнет. Просто нужные признаки ищутся по цепочке.
На мой взгляд, используемая аналогия, для конкретного примера крайне неудачная.
+4
Также по поводу «генетического» и «телепатического» наследования. Есть такой язык — Python, в нём ООП самое обычное: есть явное разделение на классы и объекты. Но при этом классы точно так же можно менять в рантайме…
Это генетика или телепатия? :-)
Это генетика или телепатия? :-)
0
Как передать контекст, в котором выполняется одна функция, другой функции?
С помощью методов call, apply или bind. А устаревший __parent__
означал что-то другое.
Если соблюдены все три этих условия, то доступ к глобальному объекту получить нельзя.
А я-то думал, что глобальные переменные window и self в браузерах доступны… А еще, если говорить о потенциальных возможностях, то всегда можно сделать вот так:
Object.defineProperty(Object.prototype, "__this__", { get() { return this; } });
const global = __this__;
0
// Мелкое копирование
Давайте будем читать, перед публикацией.
+1
НЛО прилетело и опубликовало эту надпись здесь
Т.е. у каждого объекта есть, скажем так, «теневая копия» (prototype).
Если свойство задано явно (obj.prop=...), то используется оно. Если нет, то свойство из прототипа. А вот если и оно не задано, то происходит поиск заданного свойства вниз по всем прототипам предков, до ближайшего заданного.
Я правильно понял идею?
Если свойство задано явно (obj.prop=...), то используется оно. Если нет, то свойство из прототипа. А вот если и оно не задано, то происходит поиск заданного свойства вниз по всем прототипам предков, до ближайшего заданного.
Я правильно понял идею?
0
Вы как-то больно сложно написали. С самого начала происходит поиск по всем прототипам предков, включая сам объект.
0
А зачем искать по всем прототипам предков, если свойство явно задано в объекте?
0
"JavaScript: глупости из интернета"
+1
// Не меняйте свойства по одному element.style.left = "150px;"; element.style.color = "green"; // Меняйте свойства, которые надо модифицировать, за один раз element.setAttribute ('style', 'color: green; left: 150px');
Нет, их спокойно можно юзать по одному, браузер это отрендерит за один присест. От того и боль, когда из `display: none` нужно появление блока с анимацией делать через `requestAnimationFrame`
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
JavaScript: вопросы и ответы