Наследование
Насколько я знаю JS это больше функциональный подход чем ООП. Но все такие я привык мыслить в ООП, поэтому возник подобный вопрос.
У меня есть объекты разного типа который каждый имеет метод each но расширенный, который работает с приватным атрибутом. Как мне сделать наследование что бы сохранилась и приватность атрибута и появилось наследование метода each. |
В JS нет приватных атрибутов.
|
вы статьи на сайте читали?
в особенности про прототипное наследование? и ради интереса, как вы сделали приватный атрибут? PS чуть-чуть опоздал |
Цитата:
|
Как раз таки я про замыкание в конструкторе
|
Цитата:
И да, такой подход -- зло. |
Это может быть излишняя бесполезная осторожность, но почему зло?
|
Потому что для каждого объекта создаётся своя коллекция методов.
|
Kolyaj, может есть другой вариант? Не всегда хочется выставлять наружу некоторые свойства...
|
B~Vladi,
ну называй ты приватные свойства с _. Переопределит кто-нибудь его, кому он хуже-то сделает? Себе только, у него работать перестанет. Я вообще здесь проблемы не вижу. |
Цитата:
|
Цитата:
Цитата:
Не надо привносить классовую идеологию в JavaScript, и тогда никаких проблем не будет. |
Методы в конструкторе создавать это да, некрасиво, а вот свойства бывает охота для красоты кода и правильности)
|
Цитата:
|
Цитата:
|
создаете обьект как свойство вашего обьекта (к примеру this._privat={}) и туда все что не должно глаза мозолить. можете сделать перекрестную ссылку на ваш обьект если будет нужно.
или как уже упоминалось obj._eee или obj['~eee'] |
Всё равно торчит.
|
B~Vladi,
Можно создавать в конструкторе единственный метод, который будет возвращать ссылку на приватные свойства. По сути - тоже самое, что предлагает vflash, но свойства не торчат. Вернее торчит один единственный метод, который имеет доступ к приватным свойствам. function MyClass() { var self = this; var privates = {}; self.getPrivates = function() { return privates; }; }; MyClass.prototype.setX = function(x) { return this.getPrivates().x = x; }; MyClass.prototype.getX = function() { return this.getPrivates().x; }; |
и какой толк в функции getPrivates , тоже самое что и прямая ссылка на объект только еще хуже из за лишних телодвижений.
Цитата:
|
Цитата:
Цитата:
|
with-love-from-siberia, всегда хотел проверить. Если вызывать функцию как конструктор, для неё сознаётся отдельный scope? Надо будет попробовать.
|
Цитата:
Цитата:
Цитата:
|
:D Мега-ацкое-апи
|
Часовой пояс GMT +3, время: 04:07. |