Javascript.RU

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

Сообщение от devote
дык двух и нет, есть один конструктор который строит экземпляр, назначает аксессоры, и т.д. а второй по сути
ну-ну Их вообще три, если на то пошло: один твой и два пользовательских. Ну т.е. я так понял конструктор-обертка - для приватных свойств экземпляра. На мой взгляд толку от приватных свойств мало, больше вреда, если к ним вдруг извне понадобилось получить доступ: банально при отладке, или может быть для тестов. Но будем считать, что я этого не говорил...
Ответить с цитированием
  #62 (permalink)  
Старый 27.07.2012, 08:49
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,022

Сообщение от x-yuri
На мой взгляд толку от приватных свойств мало, больше вреда
Согласен.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #63 (permalink)  
Старый 27.07.2012, 09:20
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от x-yuri
На мой взгляд толку от приватных свойств мало, больше вреда, если к ним вдруг извне понадобилось получить доступ: банально при отладке, или может быть для тестов. Но будем считать, что я этого не говорил...
спорить не будут, в чем то ты и прав, но это все равно что говорить, зачем изоляция на проводах, ведь и без нее провода могут делать то что делают. И к любому свойству при желании можно получить доступ. Но тут все же есть и плюсы, да я понимаю что открыв исходник можно и приватные свойства открыть. Но это лишь временное решение, до первого обновления, да и защита от дурака. Если давать людям все поголовно, то и тупых вопросов будет на тех же форумах и т.д. А так ты просто избавляешь себя от нападения вопросов. Банально простой пример, открыв свойство тебя спросят что это. А закрыв никто не спросит.

Но это мое ИМХО, и если все же приватные свойства были бы не к чему, их бы не использовали бы нигде.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #64 (permalink)  
Старый 27.07.2012, 11:09
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Есть такая штука как, назовём это, приватность по соглашению:
Class('MyClass', {
    myPublicMethod: function() {...},
    _myPrivateMethod: function() {...}

Так что никто спрашивать не будет. А по поводу защиты от случайной ошибки, то выглядит она сомнительно, непонятно, насколько часто она бы срабатывала.

Сообщение от devote
Но это мое ИМХО, и если все же приватные свойства были бы не к чему, их бы не использовали бы нигде.
Обычно их используют, потому что есть такая возможность. Актуально же, думаю, в случае невменяемости сотрудников.
Ответить с цитированием
  #65 (permalink)  
Старый 29.01.2013, 14:00
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 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
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine

Последний раз редактировалось devote, 29.01.2013 в 16:16.
Ответить с цитированием
  #66 (permalink)  
Старый 29.01.2013, 14:12
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

В пост выше, добавил рисунок структуры объекта, получившегося в отладчике Dragonfly.
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #67 (permalink)  
Старый 30.01.2013, 12:02
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от devote
спорить не будут, в чем то ты и прав, но это все равно что говорить, зачем изоляция на проводах, ведь и без нее провода могут делать то что делают.
Безусловно, какая-то защита от дурака должна присутствовать. Но ее можно значительно снизить, выбирая окружение.
Ответить с цитированием
  #68 (permalink)  
Старый 30.01.2013, 12:36
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

x-yuri,
решил спустя пол года ответить на пост?)))
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #69 (permalink)  
Старый 30.01.2013, 16:03
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

ну ты ж вчера воскресил тему, вот я и наткнулся на твою фразу
Ответить с цитированием
  #70 (permalink)  
Старый 30.01.2013, 16:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от x-yuri
вот я и наткнулся на твою фразу
странно что ранее на нее не ответил, хотя ты ее видел ранее
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование JavaScript на платформах Android и iPhone monolithed Мобильный JavaScript 32 08.05.2012 13:17
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 14:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 18:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 19:34
Использование dll в javascript. alexKniaz Общие вопросы Javascript 5 28.10.2008 17:56