17.10.2012, 00:19
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от melky
|
хз ... накорябал сегодня за 10 минут, со статическими свойствами, цепочечным наследованием, и как-то не чувствуется
|
Hаписал в ЛС
|
|
17.10.2012, 00:54
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
DjDiablo,
У нас на работе, к сожалению, добрая половина так думает. А потом когда смотришь в то, что он наделали, руки хочется поотрывать.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
17.10.2012, 00:54
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
monolithed,
Ну а чё в ЛС? Я тоже хочу может.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
17.10.2012, 01:07
|
|
司会
|
|
Регистрация: 29.02.2012
Сообщений: 198
|
|
Сообщение от melky
|
хз ... накорябал сегодня за 10 минут, со статическими свойствами, цепочечным наследованием, и как-то не чувствуется
|
покажи ка)
п.с. ты видимо перед этим не думал месяц целый над удобством этого чуда как это делал я)) ине придумывал все тщательно)) либо стырил решение у меня либо просто сам додумался до такого же и быстро ) но все ровно смотря на то как выглядит моя функция ты уже автоматически мог слизать её удобство))) но возможно ты этого и не сделал) короче показывай давай
|
|
17.10.2012, 08:38
|
sinistral
|
|
Регистрация: 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.
|
|
17.10.2012, 09:25
|
|
Профессор
|
|
Регистрация: 06.05.2009
Сообщений: 1,163
|
|
Вот моя реализация, использую в текущем проекте И с миксинами.
https://github.com/NekR/Sync/blob/master/core.js#L41
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
|
|
17.10.2012, 09:50
|
|
司会
|
|
Регистрация: 29.02.2012
Сообщений: 198
|
|
melky,
а у тебя статик работают так
var Cat = new Class({
__static__: {
FAV_CAT_NAME: "пушок"
},
});
Cat.FAV_CAT_NAME === new Cat().FAV_CAT_NAME // true ?
Удобнее ли вот такой подход?
var Cat = new Class( function( __static__ ){
__static__.FAV_CAT_NAME = "пушок";
} );
А так же вопрос, у тебя нет ни какой функции в описании, у тебя обьект описательный, то есть как бы нельзя делать в нем ни какие "действия" как в моей описательной функции. Например у меня в ней можно обьявлять как бы приватные вспомогательные функции которые не относятся к самому обьекту, но их используют методы этого обьекта. При том они не наследуются а наследуются только сами методы. Как это делается у тебя?
var Cat = new Class( function () {
this.__construct__ = function () {
this.food = [];
};
this.eat = function ( foodInstance ) {
var suitabilityOfFood = _testSuitabilityOfFood( foodInstance );
if ( !suitabilityOfFood ) return false;
this.food.push( foodInstance );
}
// this вообще не используется, функция вспомогательная и не является методом объекта
// по этому и не должна наследоваться. Начинается она с подчеркивания чтобы показать что это внутренняя функция
// класса, то есть просто введя подчеркивание я сразу получаю в кодкомплите какие у меня вспомогательные
// функции в этом классе есть.
function _testSuitabilityOfFood( foodInstance ) {
return foodInstance instanceof Food;
}
} );
Таким образом функция описатель представляет собой область видимости в которой мы можем вытворять че хотим.
А у тебя бы нам пришлось относить такие вспомогательные функции либо К приватным методам, либо создавать их В САМИХ МЕТОДАХ на лету.
ну то есть так
var Cat = new Class( {
eat:function ( foodInstance ) {
// каждый раз создается
function _testSuitabilityOfFood( foodInstance ) {
return foodInstance instanceof Food;
}
var suitabilityOfFood = _testSuitabilityOfFood( foodInstance );
if ( !suitabilityOfFood ) return false;
this.food.push( foodInstance );
}} );
Последний раз редактировалось Maxmaxmахimus, 17.10.2012 в 10:23.
|
|
17.10.2012, 16:52
|
sinistral
|
|
Регистрация: 28.03.2011
Сообщений: 5,418
|
|
Сообщение от Nekromancer
|
Вот моя реализация, использую в текущем проекте И с миксинами.
|
довольно интересно сделано особенно вот этот момент:
if (parent) {
if (!(this instanceof parent)) {
self = Object.create(parent.prototype);
}
parent.apply(self, arguments);
}
handler.apply(self, arguments);
return self;
};
Сообщение от Maxmaxmахimus
|
melky,
а у тебя статик работают так
var Cat = new Class({
__static__: {
FAV_CAT_NAME: "пушок"
},
});
Cat.FAV_CAT_NAME === new Cat().FAV_CAT_NAME // true ?
|
for (i in static) if (static.hasOwnProperty(i)) {
constructor[i] = static[i];
}
они не наследуются.
смотри пример со статическим "вшитым" свойством :
alert( "now" in Date ); // ну мы знаем, что это за метод такой.
var myDate = new Date(); // создадим экземпляр
alert( "now" in myDate ); // в экземпляре нету статического метода.
Сообщение от Maxmaxmахimus
|
Удобнее ли вот такой подход?
|
я поэтому и написал её, чтобы не писать вот так :
Cat.prototype.foo = function ...
Cat.prototype.bar = function ....
и __static__ туда же :
__static__.foo = ...
__static__.bar = ...
__static__.mar = ...
каждый раз повторять одно и то же неохото, поэтому я сделал всё через хеши.
Сообщение от Maxmaxmахimus
|
Как это делается у тебя?
|
очевидно, что никак я ими просто не задался.
данная функция просто позиционируется как укорачиватель действий\букв, которые тратятся впустую при обычном прототипном программировании. не более
и я в них я не вижу смысла, т.к. я сам эти "приватные" переменные (с "_" в начале имени свойства) уж точно не запорю, а внешний код в них тоже не сможет вмешаться - все экземпляры подчиняются одному ( класс App ), который является контроллером, и управляет доступом к объектам сам.
Сообщение от Maxmaxmахimus
|
ну то есть так
|
по-моему, это называется грязным хаком
Последний раз редактировалось melky, 17.10.2012 в 17:01.
|
|
17.10.2012, 17:29
|
|
Профессор
|
|
Регистрация: 21.04.2012
Сообщений: 951
|
|
macdack,
блин, ещё один Flixabi
|
|
17.10.2012, 17:31
|
|
司会
|
|
Регистрация: 29.02.2012
Сообщений: 198
|
|
Сообщение от melky
|
они не наследуются.
|
при чем здесь наследуются или не наследуются, ты сути строчки не понял?
Cat.FAV_CAT_NAME === new Cat().FAV_CAT_NAME // true ?
статические свойства доступны только из конструктора или еще из самого инстанса?
Сообщение от melky
|
по-моему, это называется грязным хаком
|
да, но это не лучше чем пихать вспомогательные функции как внутренние МЕТОДЫ обьекта)) не изза того что они там наследуются или еще что-то, а просто из за того что они не являются мтеодами и трудно будет отличить есть метод а что есть вспомогательная функция и ЧАСТь другого метода...
Кстати я понимаю у нас разные цели, но для ООП чье кунфу круче твое или мое)?
мой Class или твой)?
Только обьективно сравни) а так же скорость исполнения))
То есть если не использовать навороты которые есть у меня, а использовать на обеих функциях одно и то же) то где будет удобнее и быстрее)?
Последний раз редактировалось Maxmaxmахimus, 17.10.2012 в 17:37.
|
|
|
|