Pull to refresh

Comments 20

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


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

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

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

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

Не обязательно, только если есть в этом острая нужда.
Что означает фраза "Прототип объекта по-умолчанию может быть заменен любым другим объектом" и что иллюстрирует код идущий за ней?
Фраза хм... корява, но не в ней суть ;) попробуйте в FF пример, там есть и комментарии и в логах консоли можно посмотреть процесс.
Ну, это то да. Просто в чем глубинный смысл изменения свойства constructor прототипа и причем тут "замена прототипа объекта"?
Глубинный смысл в самом факте замены :) А замена при том, что... посмотрите foo.prototype до и после изменения foo.prototype.constructor = Object;
И что это нам дает? :)
вернее применения с налету не вижу, но рассматриваются же не применения, а возможности.
Просто мне показалось, что здесь автор пытается динамически изменить прототип уже созданного объекта, т.е. перекинуть его в другое место в иерархии. Это не так?
Не знаю, есть предположение, что речь идет о реализации «наследования» типа:
function A() {}
A.prototype = {
x : 5
};

function B() { }

b1 = new B();

B.prototype = new A();
b2 = new B();

console.log(b1.constructor === B, b2.constructor === B, B.prototype); // true, false

B.prototype.constructor = B;

console.log(b1.constructor === B, b2.constructor === B, B.prototype); // true, true

Прототипу B присваивается экземпляр A, при этом, чтобы сохранить конструктор от B приходится вручную его переприсваивать: B.prototype.constructor = B;
Замена прототипа - это суть игры в наследование в javascript. Перед тем как создать объект-экземпляр мы можем выстроить цепь объектов-прототипов так, как нам нужно, свойства этих объектов по сути станут свойствами экземпляра(ов). Соответственно, после своего создания объект-экземпляр может при необходимости делегировать сообщения своему предку, тот своему и так далее по цепи...

Ну, а ещё прототип переопределяют просто для банального сокращения записи, чтобы не писать 20 раз foo.prototype.x =..., foo.prototype.y = ... пишут инициализатор объекта foo.prototype = {x: 'preved', y: 'medved'}
как-то запутанно, начиная с рисунка. я использую ext js для создания иерархии объектов.
Но речь же не о библиотеках, я тоже ExtJS использую для наследования. А на счет запутанности... ну.. как есть ;)
Если я не ошибаюсь, то на диаграмме не хватает еще стрелочек "-- constructor -->" от объектов-экземпляров к объектам-конструкторам.
Если под этой стрелочкой подразумевается свойство "constructor" объекта-экземпляра, то такого свойства не существует.
Да, это моя глупость. Черт, логично, код
function A() {}; var a = new A();
console.log(a.constructor === A);
выдаст true, но из-за того, что конструктор найдется по цепочке у объекта-прототипа.
UFO just landed and posted this here
Читать нужно не «наблы», а обсуждение в форуме, иначе путаница гарантирована. Читать посты Zeroglif-a, как самые доходчивые по сути вопроса.
Кстати, толстые книги не катят ибо 99% из них — это полное г.
Хех, за "самые доходчивые" спасибо, если кому поможет, то это здесь: http://forum.dklab.ru/viewtopic.php?p=10…

Подавляющее большинство книг по javascript действительно плОхи, и даже не в плане освещения прототипов и наследования, а вообще, в целом. Причём нынешние современные стали ещё хуже. Раньше было много базиса и мало чего-то более глубокого, сейчас - мало базиса, куча ошибок, ужасная терминология и претензия на super-mega-advanced...
Sign up to leave a comment.

Articles