Показать сообщение отдельно
  #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.
Ответить с цитированием