27.07.2012, 01:22
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от devote
|
дык двух и нет, есть один конструктор который строит экземпляр, назначает аксессоры, и т.д. а второй по сути
|
ну-ну Их вообще три, если на то пошло: один твой и два пользовательских. Ну т.е. я так понял конструктор-обертка - для приватных свойств экземпляра. На мой взгляд толку от приватных свойств мало, больше вреда, если к ним вдруг извне понадобилось получить доступ: банально при отладке, или может быть для тестов. Но будем считать, что я этого не говорил...
|
|
27.07.2012, 09:49
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от x-yuri
|
На мой взгляд толку от приватных свойств мало, больше вреда
|
Согласен.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
|
|
27.07.2012, 10:20
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от x-yuri
|
На мой взгляд толку от приватных свойств мало, больше вреда, если к ним вдруг извне понадобилось получить доступ: банально при отладке, или может быть для тестов. Но будем считать, что я этого не говорил...
|
спорить не будут, в чем то ты и прав, но это все равно что говорить, зачем изоляция на проводах, ведь и без нее провода могут делать то что делают. И к любому свойству при желании можно получить доступ. Но тут все же есть и плюсы, да я понимаю что открыв исходник можно и приватные свойства открыть. Но это лишь временное решение, до первого обновления, да и защита от дурака. Если давать людям все поголовно, то и тупых вопросов будет на тех же форумах и т.д. А так ты просто избавляешь себя от нападения вопросов. Банально простой пример, открыв свойство тебя спросят что это. А закрыв никто не спросит.
Но это мое ИМХО, и если все же приватные свойства были бы не к чему, их бы не использовали бы нигде.
|
|
27.07.2012, 12:09
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Есть такая штука как, назовём это, приватность по соглашению:
Class('MyClass', {
myPublicMethod: function() {...},
_myPrivateMethod: function() {...}
Так что никто спрашивать не будет. А по поводу защиты от случайной ошибки, то выглядит она сомнительно, непонятно, насколько часто она бы срабатывала.
Сообщение от devote
|
Но это мое ИМХО, и если все же приватные свойства были бы не к чему, их бы не использовали бы нигде.
|
Обычно их используют, потому что есть такая возможность. Актуально же, думаю, в случае невменяемости сотрудников.
|
|
29.01.2013, 16:00
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Всем снова привет!
Сегодня влил новую стабильную версию библиотеки. В новой версии были внесены некоторые изменения и нововведения.
Что нового?
1. Была переработана система наследования, теперь множественное наследование это, все равно что обычное наследование.
2. Была введена отдельная инкапсуляция для аксессоров.
3. Теперь конструкторы можно называть именем класса.
Что изменилось?
1. Теперь контекст классов по умолчанию всегда глобальный.
1. Теперь при обращении к аксессору не имеющего getter'а срабатывает исключение, то же самое и с setter'ом.
Эти добавления и изменения заставили переписать систему построения наследования почти с нуля. Так же это сказалось на оптимизации, скорость построения классов увеличилась, размер кода остался почти без изменений (то есть мне удалось внести нововведения и изменения без огромного увеличения размера библиотеки).
Примеры:- Множественное наследование
/**
* @class Foo
*/
Class("Foo", {
/**
* @constructor
* @constructs
*/
Foo: function() {
alert("Executed constructor: " + this.__class__.className);
}
});
/**
* @class Bar
* @extends Foo
*/
Class("Bar", "Foo", { // наследуем от Foo
/**
* @constructor
* @constructs
*/
Bar: function() {
this.parent.constructor();
alert("Executed constructor: " + this.__class__.className);
}
});
/**
* @class Biz
*/
Class("Biz", {
/**
* @constructor
* @constructs
*/
Biz: function() {
alert("Executed constructor: " + this.__class__.className);
}
});
/**
* @class Baz
* @extends Biz
*/
Class("Baz", "Biz", {
/**
* @constructor
* @constructs
*/
Baz: function() {
this.parent.constructor();
alert("Executed constructor: " + this.__class__.className);
}
});
/**
* @class Mix
* @extends Bar
* @implements Baz
*/
Class("Mix", "Bar, Baz", {
/**
* @constructor
* @constructs
*/
Mix: function() {
this.parent.constructor();
alert("Executed constructor: " + this.__class__.className);
// вызываем коструктор класса указанного в параметре implements
this.Baz();
}
});
var obj = new Mix(); // alerts Foo, Bar, Mix, Biz, Baz
Структура в отладчике:
- отдельная инкапсуляция для аксессоров
/**
* @class Foo
*/
Class("Foo", {
/**
* @type {String}
* @property
* @public
*/
name: {
// инкапсуляция
value: "DefaultValue", // снаружи нет доступа к этому значению
set: function(value, self) { // self это ссылка на объект свойства name
self.value = value;
},
get: function(self) {
return self.value;
}
}
});
var obj = new Foo();
alert(obj.name); // alerts "DefaultValue"
obj.name = "NewValue"; // executed setter
alert(obj.name); // alerts "NewValue"
- конструкторы можно называть именем класса.
Это вы уже увидели из примеров выше
Основную документацию вы найдете в первом топике этой темы.
На любые вопросы с большим удовольствием отвечу. Пожелания, выслушаю. Всем спасибо!
Скачать как всегда тут: https://github.com/devote/jsClasses
Последний раз редактировалось devote, 29.01.2013 в 18:16.
|
|
29.01.2013, 16:12
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
В пост выше, добавил рисунок структуры объекта, получившегося в отладчике Dragonfly.
|
|
30.01.2013, 14:02
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от devote
|
спорить не будут, в чем то ты и прав, но это все равно что говорить, зачем изоляция на проводах, ведь и без нее провода могут делать то что делают.
|
Безусловно, какая-то защита от дурака должна присутствовать. Но ее можно значительно снизить, выбирая окружение.
|
|
30.01.2013, 14:36
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
x-yuri,
решил спустя пол года ответить на пост?)))
|
|
30.01.2013, 18:03
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
ну ты ж вчера воскресил тему, вот я и наткнулся на твою фразу
|
|
30.01.2013, 18:52
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от x-yuri
|
вот я и наткнулся на твою фразу
|
странно что ранее на нее не ответил, хотя ты ее видел ранее
|
|
|
|