Вот только хотел залезть на форум с таким же вопросом и наткнулся на это обсуждение. Жаль, что непонятки с наследованием от Array так и не разрешены :(
Может все дело в самом свойстве length? Честно говоря мне не понятно, как оно обновляется, т.е. как отслеживается сам момент добавления к массиву нового элемента. Есть ли в языке механизм, позволяющий отследить это событие или это реализовано на уровне недоступном программисту? А в остальном наследование от прототипа вроде работает корректно? |
Цитата:
Цитата:
Цитата:
|
function myObj(){
... }; myObj.prototype = Array.prototype; var x = new myObj(); x[0] = 5; Разве в этом случае x получает свой метод [[Put]](P, V) не от объекта Array.prototype? Если да, то свойство length должно обновляться нормально? Кстати, я так привязался к наследованию потому, что в этом и состоит цель - разобраться с наследованием :) |
Цитата:
Цитата:
|
[[Put]] - это специальный метод, и вряд ли он в каком-нибудь браузере по цепочке прототипов ищется
function myObj() {} myObj.prototype = new Array(); var x = new myObj(); x.__proto__[0] = 5; alert(x.__proto__.length); вот такая штука, например, работает в ff, но есть же еще ie, у которого я не знаю как к прототипу обратится. Но у него даже вручную length изменить нельзя |
Читал, но там все больше свойства к прототипу цепляют...
А хочется свой класс сделать Вариант с __proto__ не нравится. Этак можно просто сделать x.arr = [] x.arr[0] = 5; alert(x.arr.length) .... Но какое ж это наследование. Может проблема в подходе. В JavaScript просто плохо применимы методы ооп из типизированных языков, а нужно действовать по другому? |
фактически, в 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 |
Спасибо за ссылочки
Теперь понятно откуда ноги растут :) |
Часовой пояс GMT +3, время: 07:19. |