03.06.2010, 18:40
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Kolyaj
|
Себе только, у него работать перестанет.
|
Это понятно. Просто иногда хочется сделать такое апи, чтобы ничего лишнего не торчало. Да, прототипы это хорошо, но иногда этого мало. Я согласен с тем, что для объектов дублирование методов есть большое зло. Как вариант, можно создать локальный объект, который будет хранить нужную инфу для каждого объекта, там самым мы сможем использовать прототипы.
|
|
03.06.2010, 18:43
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от B~Vladi
|
Просто иногда хочется сделать такое апи, чтобы ничего лишнего не торчало.
|
Ну что значит не торчало? Что изменится от того, что будет торчать?
Сообщение от B~Vladi
|
что для объектов дублирование методов есть большое зло
|
Так не единственное. Наследование, как видишь, тоже не реализовать нормально.
Не надо привносить классовую идеологию в JavaScript, и тогда никаких проблем не будет.
|
|
03.06.2010, 18:44
|
Аспирант
|
|
Регистрация: 11.01.2010
Сообщений: 32
|
|
Методы в конструкторе создавать это да, некрасиво, а вот свойства бывает охота для красоты кода и правильности)
|
|
03.06.2010, 18:45
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от Kein
|
а вот свойства бывает охота для красоты кода и правильности)
|
А свойства и должны в конструкторе определяться, иначе они будут общими для всех объектов, порождаемых этим конструктором. Только не надо путать свойства с локальными переменными, лежащими в конструкторе.
|
|
03.06.2010, 20:17
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Kolyaj
|
Ну что значит не торчало? Что изменится от того, что будет торчать?
|
Вот хочется мне чтобы не "торчало", что поделать? Ненужно оно там совсем.
|
|
04.06.2010, 00:42
|
|
Профессор
|
|
Регистрация: 09.07.2007
Сообщений: 304
|
|
создаете обьект как свойство вашего обьекта (к примеру this._privat={}) и туда все что не должно глаза мозолить. можете сделать перекрестную ссылку на ваш обьект если будет нужно.
или как уже упоминалось obj._eee или obj['~eee']
|
|
04.06.2010, 02:15
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Всё равно торчит.
|
|
04.06.2010, 11:59
|
Профессор
|
|
Регистрация: 14.12.2009
Сообщений: 155
|
|
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;
};
|
|
04.06.2010, 12:29
|
|
Профессор
|
|
Регистрация: 09.07.2007
Сообщений: 304
|
|
и какой толк в функции getPrivates , тоже самое что и прямая ссылка на объект только еще хуже из за лишних телодвижений.
Сообщение от B~Vladi
|
Всё равно торчит.
|
ну и пусть торчит. проблема высосана из пальца
|
|
04.06.2010, 12:36
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от with-love-from-siberia
|
Можно создавать в конструкторе единственный метод, который будет возвращать ссылку на приватные свойства. По сути - тоже самое, что предлагает vflash, но свойства не торчат. Вернее торчит один единственный метод, который имеет доступ к приватным свойствам.
|
Я так и делаю.
Сообщение от vflash
|
ну и пусть торчит. проблема высосана из пальца
|
Это API, а не проблема.
|
|
|
|