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)

Aves 15.04.2013 13:10

Цитата:

Сообщение от dmitriymar (Сообщение 246278)
.... здорово , а ничего что ссылка на конструктор это свойство прототипа, а не прототип свойство конструктора ?

Зашибись, то есть String.prototype это я придумал, а на самом деле такого не существует.

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

Вы бы проспались сначала, и повнимательнее читать стали, прежде чем позориться.

megaupload 15.04.2013 13:15

father_gorry,
ебать ты нубло

dmitriymar 15.04.2013 13:21

Цитата:

Сообщение от Aves
Сообщение от dmitriymar Посмотреть сообщение
.... здорово , а ничего что ссылка на конструктор это свойство прототипа, а не прототип свойство конструктора ?
Зашибись, то есть String.prototype это я придумал, а на самом деле такого не существует.

Так и есть 90%, из того что ты пишешь, ты сам придумываешь. И маскируешь это под что то знакомое всем, так что с первого взгляда выглядит правдоподобно. Учи основы -ты часто бред несёшь.
Причём прототип "строки" к тому что, ты конструктор сделал родителем прототипа , а не прототип родительским объектом ссылки на конструктор?
Фленеган 6 издание стр . 226
var F = function (){}
var p = F.prototype
var c = p.constructor
c === F

dmitriymar 15.04.2013 13:33

Цитата:

Сообщение от Aves
Вы бы проспались сначала, и повнимательнее читать стали, прежде чем позориться.

Да кстати, обрати внимание что, в моих сообщениях стоят цитаты, с твоих сообщений.
Поэтому прежде чем давать, подобные "советы" подумай десять раз о том как ты позоришься перекручивая и пытаясь выставить всё в другом свете:D

rgl 15.04.2013 15:46

Цитата:

Сообщение от Aves
И я знаю, что произойдет с объектом, если поменять прототип у его конструктора, мне для этого не нужно "несколько строчек" писать

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

rgl 15.04.2013 15:58

Цитата:

Сообщение от Aves
Если опустить тонкости, то можно сказать, что у объектов нет прототипов, у них есть конструкторы.

Вы путаете прототип объекта и созвучное свойство prototype конструктора. У объекта есть прототип, хотя в стандарте (по крайней мере в старом) нет к нему прямого доступа. То, что кажется свойством constructor объекта, на самом деле свойство прототипа, которое может быть, а может и не быть выставлено правильно. Оно почти никогда не нужно, поэтому о нем часто забывают.
function Test() {}
Test.prototype = { a:1, b:2, constructor:Test }
Без выделенной части свойство constructor созданного объекта будет указывать не на Test а на Object, тем не менее прототипом созданного объекта будет Test.prototype

Aetae 15.04.2013 16:16

Опять все упоролись по ооп. =\

SV0L0CH 15.04.2013 16:23

Обсуждают прототипное наследование, но в приведнных примерах кода нет применения instanceof. Зачем вообще такое наследование без instanceof?

father_gorry 15.04.2013 19:31

Цитата:

Сообщение от dmitriymar (Сообщение 246281)
Изменить прототип существующего объекта полностью ? Для этого он может и не быть промежуточным в длинной цепочке. достаточно у одного конструктора полностью сменить прототип .
А что мешает протестить самому? -это несколько строк кода всего
function A(){this.num =10};
function D(){this.num =20};
function B(){}
B.prototype = new A;
var c = new B;
alert(c.num)
B.prototype = new D;
alert(c.num)

В Вашем примере оба раза 10. Где ошибка?

И заодно, почему нельзя вместо
function A(){this.num =10};
function B(){}
B.prototype = new A;

писать
function B(){
  this.prototype = new function(){this.num =10}
};

?
Второй вариант ведь намного лаконичнее и проще бы воспринимался!

Hekumok 15.04.2013 20:00

Цитата:

Сообщение от father_gorry
В Вашем примере оба раза 10. Где ошибка?

С чего это вы взяли, что там ошибка? :blink:
Цитата:

Сообщение от father_gorry
В И заодно, почему нельзя вместо
function A(){this.num =10};
function B(){}
B.prototype = new A;

писать
function B(){
  this.prototype = new function(){this.num =10}
};

?
Второй вариант ведь намного лаконичнее и проще бы воспринимался!

Так НЕЛЬЗЯ писать потому, что свойство prototype - это НЕ прототип, а обычное свойство! Поймите вы это уже


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