Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   вопрос по prototype (https://javascript.ru/forum/misc/37162-vopros-po-prototype.html)

xfreewindx 09.04.2013 23:41

вопрос по prototype
 
Здравствуйте!

Подскажите пожалуйста, немного недогоняю по prototype в JS.
Скажем есть пример из учебника:
var animal = { eats: true }

function Rabbit(name) { 
  this.name = name;
}

Rabbit.prototype = animal;

var rabbit = new Rabbit('John');

alert( rabbit.eats ); // true, т.к. rabbit.__proto__ == animal


Здесь Rabbit.prototype равно animal. И соответственно объект rabbit наследует все свойства объекта animal.

В главе про классы есть пример:
var obj = { };
alert( obj ); // "[object Object]" ?


И говорится что запись {} эквивалентна записи new Object
При выполнении new Object, создаваемому объекту ставится __proto__ по prototype конструктора, в данном случае это будет Object.prototype — встроенный объект, хранящий свойства и методы, общие для объектов, в частности, есть Object.prototype.toString.

Я что-то не пойму,
в первом примере мы назначили Rabbit.prototype = animal, здесь все понятно animal стал прототипом rabbit, а во втором примере почему прототипом будет Object.prototype???
Чему равен Object.prototype ???
Если следовать логике первого примера, то
Object.prototype = "некий объект"
Тогда прототипом obj должен быть "некий объект"?

Akalenik 09.04.2013 23:52

Цитата:

Object.prototype is one of the rare objects that has no prototype: it does not inheritany properties. Other prototype objects are normal objects that do have a prototype. All of the built-in constructors (and most user-defined constructors) have a prototype that inherits from Object.prototype. For example, Date.prototype inherits properties from Object.prototype, so a Date object created by new Date() inherits properties from both Date.prototype and Object.prototype. This linked series of prototype objects is known as a prototype chain.
Это цитата из Фланагана по данному вопросу.

xfreewindx 10.04.2013 11:03

Спасибо, понял.

megaupload 10.04.2013 18:03

цепочка прототипов кончается обьектом null

и да Object.prototype = {встроенный обьект с методами}

а Object.prototype.__proto__ = null и дальше ничего нет


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