Показать сообщение отдельно
  #25 (permalink)  
Старый 17.10.2012, 08:38
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Maxmaxmахimus
п.с. ты видимо перед этим не думал месяц целый над удобством этого чуда как это делал я))
я решил перейти с обычных конструкторов и прототипов на более высший интерфейс для создания конструкторов, проосто потому что так красивее код смотрится

ну и задание того требует, чтобы код был ООП-шным.

Сообщение от Maxmaxmахimus
либо стырил решение у меня либо просто сам додумался до такого же и быстро )
я 2 года назад уже представлял, как она будет выглядеть

вдохновлялся кодом Class из мутулз.

Сообщение от Maxmaxmахimus
но возможно ты этого и не сделал) короче показывай давай
да ничего особенного , что ты думаешь ..

да, её надо причесать.. но она мне нужна вот чисто в текущем проекте - я хочу писать в функциональном стиле.
function Class (descriptor) {

        var constructor = descriptor.__construct__ || function () {};
        var parent = descriptor.__extends__ || {};
        var static = descriptor.__static__ || {};
        var i;

        if (typeof parent === "function") {
            parent = new parent();
        }

        constructor.prototype = Object.create(parent);
        constructor.prototype.super = parent;
        constructor.prototype.constructor = constructor;

        for (i in descriptor) if (descriptor.hasOwnProperty(i)) {
            constructor.prototype[i] = descriptor[i];
        }

        for (i in static) if (static.hasOwnProperty(i)) {
            constructor[i] = static[i];
        }

        return constructor;
    }

var Creation = new Class({
    createdBy: "God",

    // см. этот метод в каждом классе и результат
    overrideMe: function () {
        return "Hello";
    }
});

var Animal = new Class({

    __extends__: Creation,

    lives: true,

    overrideMe: function () {
        return this.super.overrideMe() + ", ";
    }
});

var Cat = new Class({

    __construct__: function (name) {
        alert("Создана кошкэ");
        this.name = name;
     },

    __extends__: Animal,

    __static__: {
        FAV_CAT_NAME: "пушок"
    },

    meow: function () {
        alert(this.name + " : мяу");
        alert("Унаследовал : " + this.createdBy);
    },

    overrideMe: function () {
        return this.super.overrideMe() + "World!";
    }
});

var cat = new Cat( Cat.FAV_CAT_NAME );

cat.meow();

alert(cat.overrideMe());

Последний раз редактировалось melky, 17.10.2012 в 08:43.
Ответить с цитированием