Сообщение от 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 и упорно не хотите воспринимать, что это свойство - всего лишь свойство, а никакой не прототип