Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 15.03.2009, 13:38
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

на всякий случай.читали вы это?особенно вторую статью.
там по моему вполне качественно объясняется.
если читали,и не поняли суть, то я даже не знаю как вам объяснить по другому
Ответить с цитированием
  #3 (permalink)  
Старый 15.03.2009, 14:01
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Сообщение от Gvozd Посмотреть сообщение
на всякий случай.читали вы это?особенно вторую статью.
там по моему вполне качественно объясняется.
если читали,и не поняли суть, то я даже не знаю как вам объяснить по другому
Читал, а как объяснить - просто ответить на конкретный вышепоставленный вопрос зацепку, если, конечно, Вы сам понимаете ответ. Сечас добавил еще в PS аргументы.

Последний раз редактировалось kefi, 15.03.2009 в 14:04.
Ответить с цитированием
  #4 (permalink)  
Старый 15.03.2009, 14:17
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

дда хрен его знает, откровенно говоря.
не настолько я глубоко это знаю, как оказывается.
как говорится воспринимайте образами и звуками.
вот примерно так я и воспиринимаю.пожтому словами объяснить определения человеческим языком не могу.
советую еще почитать оригинальную документацию, можеть она прояснит ва ситуацию.
замечу что ваши тесты немного по разному работают в разных браузерах(вы тестировали, подозреваю в опере.в мозиле некоторые рузльтаты отличаются), и связано это с разной реализацией базовых типов.вот со своими объектами, думаю все будет одинаково в обоих браузерах
Ответить с цитированием
  #5 (permalink)  
Старый 15.03.2009, 14:32
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Сообщение от Gvozd
ваши тесты немного по разному работают в разных браузерах(вы тестировали, подозреваю в опере.в мозиле некоторые рузльтаты отличаются), и связано это с разной реализацией базовых типов
Тестировал в SciTE (точнее в WSH (WScript,Cscript) или в IE6SP1). Но это, точнее говоря не базовые , а встроенные в JavaScript типы (Array etc), поэтому если браузеры поддерживают javascript, то по встренным типам в javascript должна соблюдаться совместимость и никаких различий в их реализации быть не может .
Ответить с цитированием
  #6 (permalink)  
Старый 15.03.2009, 14:34
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

Сообщение от kefi
Короче , путаница получается - распутайте, плз.
http://forum.dklab.ru/viewtopic.php?p=102575#102575
Сообщение от kefi
Если Array является объектом (встроенным) со свойствами constructor,length,prototype,concat,join etc
Вы смешиваете в кучу свойства разных объектов. У Array свои свойства, у Array.prototype свои. Array - это конструктор, функция, он не наследует от Array.prototype, от него наследуют новые массивы, "экземпляры" (new Array).
Ответить с цитированием
  #7 (permalink)  
Старый 15.03.2009, 14:35
Кандидат Javascript-наук
Отправить личное сообщение для kefi Посмотреть профиль Найти все сообщения от kefi
 
Регистрация: 12.03.2009
Сообщений: 148

Или вот такой совсем простой вопрос - что заносится, если заносится вообще, в свойство нового объекта prototype при его создании (т.е. (New {}).prototype чему равно и какого типа ) ?
Ответить с цитированием
  #8 (permalink)  
Старый 15.03.2009, 14:43
Отправить личное сообщение для Андрей Параничев Посмотреть профиль Найти все сообщения от Андрей Параничев
 
Регистрация: 21.02.2008
Сообщений: 1,250

kefi,
Прототип может быть только у конструктора (функции). Прототип это ссылка на объект, в котором будет производится поиск свойств, если они не были найдены в объекте, сформированным конструктором. С помощью прототипов в JavaScript реализуется наследование.

Возможно вам что-то разъяснит следующий код:
// Объявляем конструктор
var constr = function() {
    // Объявляем свойство объекта
    this.a = 1;
}

// Объявляем свойство прототипа
constr.prototype.b = 2;

// Создаем объект конструктора
var obj = new constr();

alert([obj.hasOwnProperty("a"), obj.a]); // true, 1
alert([obj.hasOwnProperty("b"), obj.b]); // false, 2


Свойства b в "собственных" свойствах объекта не было, но он был найден в прототипе. Вообще, рекомендую почитать статью о наследовании, я уверен, она ответит на ваши вопросы, касательно прототипов.

Последний раз редактировалось Андрей Параничев, 15.03.2009 в 14:55.
Ответить с цитированием
  #9 (permalink)  
Старый 15.03.2009, 14:49
...
Отправить личное сообщение для Zeroglif Посмотреть профиль Найти все сообщения от Zeroglif
 
Регистрация: 09.03.2008
Сообщений: 216

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

2 Zeroglif > спасибо за ссылки, прочту, пока с пустой головой так быстро я не погружусь.
А пока :
Сообщение от Андрей Параничев
Прототип может быть только у конструктора (функции).
Где написано, или из чего следует, что он не наследуется от Object? Ведь вновь создаваемые объекты должны наследовать свойства от своих предков, общим для всех является объект Object ?

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с javascript andruhin Общие вопросы Javascript 12 04.05.2012 10:05
Программист на JavaScript (удалённо) Vadym Работа 1 28.01.2009 13:57
Приглашаем специалиста по JavaScript. Мск, от 75 000 руб. arturus Работа 30 14.01.2009 02:30
JavaScript Developer, Санкт-Петербург (2000 - 2500 $) lampa Работа 3 26.08.2008 15:41
Нужен Старший разработчик JavaScript Yandex Работа 17 19.08.2008 16:43