Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 16.03.2014, 20:30
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

честно говоря сразу хотел назвать прототипы с маленькой буквы, потом зачем-то оставил, как в примере по ссылке
Ответить с цитированием
  #12 (permalink)  
Старый 16.03.2014, 21:04
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

бывает

Я вот теперь не могу тему переименовать. Только название получилось
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #13 (permalink)  
Старый 16.03.2014, 21:17
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

с чпу наверное уже ничего не сделать
Ответить с цитированием
  #14 (permalink)  
Старый 17.03.2014, 21:46
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Octane
с чпу наверное уже ничего не сделать
за ошибки приходиться платить. Ну да ладно
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #15 (permalink)  
Старый 19.03.2014, 13:18
Интересующийся
Посмотреть профиль Найти все сообщения от Maxmaxmaximus11
 
Регистрация: 19.03.2014
Сообщений: 14

Ща вам батя покажет класс
Ответить с цитированием
  #16 (permalink)  
Старый 19.03.2014, 14:26
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

о нееет, пощади!
Ответить с цитированием
  #17 (permalink)  
Старый 19.03.2014, 17:01
Интересующийся
Посмотреть профиль Найти все сообщения от Maxmaxmaximus11
 
Регистрация: 19.03.2014
Сообщений: 14

новая версия Class, к суперметодам обращаемся через $methodName. если свойство начинается или заканчивается на жетсткий побел, то оно становится не итерируемым. вот и вся суть

function Class(){

}

Class.extend = function (Prototype) {

    Prototype.prototype = this.prototype;
    constructor.prototype = new Prototype();
    constructor.extend = this.extend;

    
    function constructor() {
        if (this.constructor) {
            this.constructor.apply(this, arguments);
        }

        for (var key in this) if (this.hasOwnProperty(key) && /(^_)|(_$)/.test(key)) {
            Object.defineProperty(this, key, {
                value       : this[key],
                writable    : true,
                configurable: true,
                enumerable  : false
            });
        }
    }


    for (var key in constructor.prototype) if (constructor.prototype.hasOwnProperty(key)) {

        if (/(^_)|(_$)|(constructor)/.test(key)) {
            Object.defineProperty(constructor.prototype, key, {
                value       : constructor.prototype[key],
                writable    : true,
                configurable: true,
                enumerable  : false
            });
        }

        if (key in this.prototype && typeof this.prototype[key] === 'function') {
            Object.defineProperty(constructor.prototype, '$' + key, {
                value       : this.prototype[key],
                writable    : false,
                configurable: false,
                enumerable  : false
            });
        }

    }


    return constructor;
};


//##############################################################


// проверяем суперметоды
alert('проверяем суперметоды')


var Animal = Class.extend(function () {
    this.say = function () {
        alert('Animal');
    }
});


var Cat = Animal.extend(function () {
    this.say = function () {
        this.$say();
        alert('Cat');
    }
});


new Cat().say(); // Animal, Cat



// проверяем приватные
alert('проверяем приватные')

var Animal = Class.extend(function () {
    this.say = function () {

    };

    this._need = function () {

    }
});


for (var key in new Animal) alert(key) // say



// проверяем instanceof
alert('проверяем instanceof')

alert( new Cat() instanceof Cat ) // true

Последний раз редактировалось Maxmaxmaximus11, 19.03.2014 в 19:47.
Ответить с цитированием
  #18 (permalink)  
Старый 19.03.2014, 17:54
Интересующийся
Посмотреть профиль Найти все сообщения от Maxmaxmaximus11
 
Регистрация: 19.03.2014
Сообщений: 14

Ну а дальше вы можете расширять этот каркас всякими деструкторами и евент эмиттерами:

var EventEmitter = Class.extend(function () {


    this.constructor = function () {
        this._handlersStore = {}
    };


    this.on = function (type, handler) {
        var handlersStore = this._handlersStore;
        var handlers = handlersStore[type] || (handlersStore[type] = []);

        handlers.push(handler);
    };

    this.emit = function (type) {
        var self = this;
        var eventArgs = [].slice.call(arguments, 1);
        var handlersStore = this._handlersStore;
        var handlers = handlersStore[type] || [];

        handlers.forEach(function (handler) {
            handler.apply(self, eventArgs);
        });
    };

});


var q = new EventEmitter();

q.on('click', function () {
    alert('on click!');
});

q.emit('click');

Последний раз редактировалось Maxmaxmaximus11, 19.03.2014 в 18:17.
Ответить с цитированием
  #19 (permalink)  
Старый 19.03.2014, 18:35
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

1. Если я правильно понял, то это
function constructor() {
    if (this.constructor) {
        this.constructor.apply(this, arguments);
    }
}

правильней написать так
function constructor() {
    if (this.$constructor) this.$constructor.apply(this, arguments);
    if (this.constructor) this.constructor.apply(this, arguments);
}

2. Как быть, если потребуются уникальные функции для экземпляра, а не из прототипа?
3. Если уж так писать циклы, обертки и т.п. то можно и миксыны сделать
4. Нет той гибкости, кот. есть при использовании ссылки на СуперКласс (на мой взгляд)
5. Кроме того, стороннему разработчику придется разбираться в твоей капусте
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 19.03.2014 в 18:39.
Ответить с цитированием
  #20 (permalink)  
Старый 19.03.2014, 18:44
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Maxmaxmaximus11
к суперметодам обращаемся через $methodName
Обрати внимание на название темы. С твоим подходом не получится многоуровневое наследование.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множественное наследование - миф или реальность?! B~Vladi Оффтопик 109 04.09.2012 16:13