Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что такое прототипы (https://javascript.ru/forum/misc/11014-chto-takoe-prototipy.html)

Deniskan 02.08.2010 13:08

Что такое прототипы
 
Обьясните пожалуйста на понятном языке, что такое прототипы и для чего они нужны:help: :help:

Kolyaj 02.08.2010 13:10

http://javascript.ru/tutorial/object/inheritance

Deniskan 02.08.2010 23:54

В этой статье я застрял на наследовании на классах - вот эту строчку вообще не понятно - Rabbit.prototype = new Animal() - обьясните пожалуйста её смысл:help:

x-yuri 03.08.2010 01:38

ну так это не лучший вариант как там объяснено. Смысл в том, что на основе свойства prototype функции будут созаваться объекты. Т.е. после
var rabbit = new Rabbit();

rabbit.[[prototype]] (в браузерах оно реализовано как rabbit.__proto__) будет ссылаться на созданный объект Animal
function Animal(){}
function Rabbit(){}
Rabbit.prototype = new Animal();
Rabbit.prototype.prop = 2; // только не надо так в real life делать
rabbit = new Rabbit();
alert(rabbit.__proto__ instanceof Animal); // работает в ff, opera
alert(rabbit.__proto__ === Rabbit.prototype); // работает в ff, opera
alert(rabbit.prop);

т.е. __proto__ - прототип объекта, prototype - объект, который будет использоваться как прототип для создаваемых в дальнейшем объектов

Deniskan 03.08.2010 14:56

У меня вопрос то в чем - есть ли разница между этим

function Animal () {};
var animal = new Animal();

function Rabbit () {};
Rabbit.prototype = animal;

и этим

function Animal () {};

function Rabbit () {};
Rabbit.prototype = new Animal();

Kolyaj 03.08.2010 14:59

Очевидно, нет.

Deniskan 03.08.2010 16:00

Если нет - эт хорошо, тогда я все понимаю:)

Kolyaj 03.08.2010 16:06

Более того, можно даже так, и будет то же самое
unction Animal () {};
var animal1 = new Animal();
var animal2 = animal1;
var animal3 = animal2;

function Rabbit () {};
Rabbit.prototype = animal3;


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