Показать сообщение отдельно
  #1 (permalink)  
Старый 15.03.2009, 13:23
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Понимание ООП в JavaScript
Чей-то почитал тут и там статьи и разное и запутался совсем . Что же такое ООП в JavaScript ...
Хотелось бы в этой теме провентилировать разные конкретные вопросы.

Первый вопрос , чтобы зацепиться, такой :

Если Array является объектом (встроенным) со свойствами constructor,length,prototype,concat,join etc..., то почему же я получаю эти свойства у его прототипа, а не у него самого :
alert(Array.prototype.hasOwnProperty("join") ) // true
 alert(Array.hasOwnProperty("join"))                // false
?

Тем более, что сказано в документации :
Этот метод не проверяет наличие свойства по цепочке прототипов; указанным свойством должен обладать именно сам объект. А пример выше показывает, что именно сам объект Array не обладает свойством, а обладает, наоборот, - прототип Array.prototype .
Короче , путаница получается - распутайте, плз.
Кстати, и в этом контексте также непонятно, почему :
var a = new Array(); alert(a.hasOwnProperty("join")) // false

PS Вот еще непонятные в связи с этим вопросом вещи :
var a = new Array(1,2);
alert(a.join(";")+"= a.join(';') Работает"); 

alert(a.hasOwnProperty("join")+"=a.hasOwnProperty('join') У собств НЕТ")    // false
alert(Array.hasOwnProperty("join")+"=Array.hasOwnProperty('join') У Array НЕТ") // false
alert(Array.prototype.hasOwnProperty("join")+"=Array.prototype.hasOwnProperty('join') У Array.prototype ЕСТЬ") // true
alert(Array.prototype.isPrototypeOf(a)+"=Array.prototype.isPrototypeOf(a)"); // true
alert(Array.isPrototypeOf(a)+"=Array.isPrototypeOf(a)"); // false
alert()
alert(Array.prototype.isPrototypeOf(Array)+"=Array.prototype.isPrototypeOf(Array)"); // false
alert(Array.isPrototypeOf(Array)+"=Array.isPrototypeOf(Array)"); // true
alert()
alert(Object.prototype.isPrototypeOf(Array)+"=Object.prototype.isPrototypeOf(Array)"); // true
alert(Object.isPrototypeOf(Array)+"=Object.isPrototypeOf(Array)"); // false
alert()
alert(Object.prototype.hasOwnProperty("constructor")+"=Object.prototype.hasOwnProperty('constructor')") // true
alert(Function.hasOwnProperty("constructor")+"=Function.hasOwnProperty('constructor')") // false


PPS. Может вообще кто-нибудь человеческим неформальным языком объяснить, что такое прототип, экземпляр объекта(или класса, не знаю , как правильно), объект(класс, не знаю , как в javascript надо говорить) ?

Последний раз редактировалось kefi, 15.03.2009 в 14:05.
Ответить с цитированием