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



спасибо, баг нашел, короч влом фиксить, все ровно это ни кто юзать не будет. но мой способ поддерживает множественное наследование)

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;
};

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


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


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


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


new Ashot().say();
Ответить с цитированием