Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Есть ли разумное объяснение столь чрезмерной сложности наследования в js? (https://javascript.ru/forum/misc/37293-est-li-razumnoe-obyasnenie-stol-chrezmernojj-slozhnosti-nasledovaniya-v-js.html)

Aetae 16.04.2013 13:34

Цитата:

Сообщение от rgl (Сообщение 246446)
Т.е. constructor - не конструктор. Точно так же можно показать, что prototype - не прототип

Цитата:

Сообщение от dmitriymar (Сообщение 246453)
прототип это прототип, конструктор это конструктор.

Наркоманы. -_\\

megaupload 16.04.2013 14:54

аххаах

Hekumok 16.04.2013 15:56

Цитата:

Сообщение от father_gorry
Хорошо, прототип - это не прототип (sic!), а свойство.

Кто сказал вам эту бяку? Я же говорил вам, что свойство prototype объекта - не прототип! Прототип объекта находится в скрытом свойстве [[Prototype]], которое доступно в некоторых браузерах как свойство __proto__
Свойство же prototype функции указывает на прототип будущих объектов, которые она создаст
Объясню на пальцах для тупых
var obj = {
 size: 50
} ; // итак, это у нас обычный объект
function Constr() {
 this.color = "red" ;
} ; // объявили функцию-конструктор
Constr.prototype = obj ; /* присвоили свойству prototype функции-конструктора ссылку на obj
теперь у объектов, созданных этой функцией-конструктором, прототип будет ссылаться на obj
*/
var newObj = new Constr ; /* создали новый объект с помощью функции-конструктора
прототип этого объекта ссылается на obj
мы даже можем это проверить
*/
alert(newObj.size) ; /* size взялся из прототипа, ведь у самого newObj такого свойства нет
вот и доказательство, что obj - прототип newObj, т.к. только у obj есть это свойство
проверим по-другому
*/
alert(newObj.__proto__ == obj) ; // true, действительно obj является прототипом объекта newObj
// мы можем сделать даже так
alert(newObj.__proto__.size) ; // ведь т.к. newObj.__proto__ ссылается на obj, то мы можем взять свойство size прямо оттуда
// а теперь проверяем, что же такое свойство prototype у объекта?
alert(newObj.prototype) ; /* undefined!
Действительно, мы же не определяли это свойство у newObj, вот оно и равно undefined
Мы можем делать с этим свойством что угодно
*/
newObj.prototype = "string" ; // присвоили этому свойству строку
alert(newObj.prototype) ; // string
delete newObj.prototype ; // удалили это свойство
alert(newObj.prototype) ; // оно снова undefined
alert(newObj.__proto__ == obj) ; // а прототип по-прежнему остался неизменным


Цитата:

Сообщение от father_gorry
Так я и пользуюсь им как свойством

Вы пользуетесь не прототипом! Свойство prototype объекта не является его прототипом!
Цитата:

Сообщение от father_gorry
в результате - prototype.prototype.prototype.

В результате, естественно, бред
Цитата:

Сообщение от father_gorry
Да, он и ведет себя как обычное свойство.

Ну prototype это и есть обычное свойство объекта, как и другие.
Цитата:

Сообщение от father_gorry
Но при чем здесь тогда наследование через прототип, его же нет?

Он есть, просто вы привязались к свойству prototype и упорно не хотите воспринимать, что это свойство - всего лишь свойство, а никакой не прототип


Часовой пояс GMT +3, время: 08:25.