Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 02.02.2009, 09:37
Dicot
 
Сообщений: n/a

Вот только хотел залезть на форум с таким же вопросом и наткнулся на это обсуждение. Жаль, что непонятки с наследованием от Array так и не разрешены

Может все дело в самом свойстве length?
Честно говоря мне не понятно, как оно обновляется, т.е. как отслеживается сам момент добавления к массиву нового элемента.
Есть ли в языке механизм, позволяющий отследить это событие или это реализовано на уровне недоступном программисту?

А в остальном наследование от прототипа вроде работает корректно?
Ответить с цитированием
  #12 (permalink)  
Старый 02.02.2009, 09:44
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
Может все дело в самом свойстве length?
других причин не вижу. Но если в ff его можно вручную изменить при наследовнии, то в ie - нельзя

Цитата:
Честно говоря мне не понятно, как оно обновляется, т.е. как отслеживается сам момент добавления к массиву нового элемента.
автоматически (http://javascript.ru/ecma/part15#a-15.4.5)

Цитата:
Есть ли в языке механизм, позволяющий отследить это событие или это реализовано на уровне недоступном программисту?
не знаю, я приводил альтернативные варианты решения проблемы. Почему необходимо именно наследование?
Ответить с цитированием
  #13 (permalink)  
Старый 02.02.2009, 11:26
Dicot
 
Сообщений: n/a

function myObj(){
...
};
myObj.prototype = Array.prototype;

var x = new myObj();

x[0] = 5;

Разве в этом случае x получает свой метод [[Put]](P, V) не от объекта Array.prototype? Если да, то свойство length должно обновляться нормально?

Кстати, я так привязался к наследованию потому, что в этом и состоит цель - разобраться с наследованием
Ответить с цитированием
  #14 (permalink)  
Старый 02.02.2009, 11:35
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Цитата:
Разве в этом случае x получает свой метод [[Put]](P, V) не от объекта Array.prototype? Если да, то свойство length должно обновляться нормально?
[[Put]] - свойство экземпляра Array... кстати, надо будет одну штуку попробовать

Цитата:
Кстати, я так привязался к наследованию потому, что в этом и состоит цель - разобраться с наследованием
а уже читал http://javascript.ru/tutorial/object/inheritance ?
Ответить с цитированием
  #15 (permalink)  
Старый 02.02.2009, 11:43
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

[[Put]] - это специальный метод, и вряд ли он в каком-нибудь браузере по цепочке прототипов ищется
function myObj() {}
myObj.prototype = new Array();
var x = new myObj();
x.__proto__[0] = 5;
alert(x.__proto__.length);

вот такая штука, например, работает в ff, но есть же еще ie, у которого я не знаю как к прототипу обратится. Но у него даже вручную length изменить нельзя
Ответить с цитированием
  #16 (permalink)  
Старый 02.02.2009, 12:04
Dicot
 
Сообщений: n/a

Читал, но там все больше свойства к прототипу цепляют...
А хочется свой класс сделать

Вариант с __proto__ не нравится.
Этак можно просто сделать

x.arr = []
x.arr[0] = 5;
alert(x.arr.length)
....

Но какое ж это наследование.

Может проблема в подходе. В JavaScript просто плохо применимы методы ооп из типизированных языков, а нужно действовать по другому?
Ответить с цитированием
  #17 (permalink)  
Старый 02.02.2009, 12:23
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

фактически, в javascript нету классов, а наследование построено на прототипах. Классы можно только эмулировать и по-разному, а можно не эмулировать
Прототипное программирование — стиль объектно-ориентированного программирования (может не очень достоверный источник, но вот http://ru.wikipedia.org/wiki/Про...ова ие)

еще есть такие варианты
http://ejohn.org/blog/simple-javascript-inheritance/
http://dean.edwards.name/weblog/2006/03/base/
http://javascript.crockford.com/inheritance.html
http://javascript.crockford.com/prototypal.html
Ответить с цитированием
  #18 (permalink)  
Старый 02.02.2009, 17:07
Dicot
 
Сообщений: n/a

Спасибо за ссылочки
Теперь понятно откуда ноги растут
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить включен ли поддержака объектов ActoveX feodul Events/DOM/Window 5 02.06.2008 12:04