Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 17.10.2012, 00:19
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от melky
хз ... накорябал сегодня за 10 минут, со статическими свойствами, цепочечным наследованием, и как-то не чувствуется
Hаписал в ЛС
Ответить с цитированием
  #22 (permalink)  
Старый 17.10.2012, 00:54
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

DjDiablo,
У нас на работе, к сожалению, добрая половина так думает. А потом когда смотришь в то, что он наделали, руки хочется поотрывать.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #23 (permalink)  
Старый 17.10.2012, 00:54
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

monolithed,
Ну а чё в ЛС? Я тоже хочу может.
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #24 (permalink)  
Старый 17.10.2012, 01:07
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

Сообщение от melky
хз ... накорябал сегодня за 10 минут, со статическими свойствами, цепочечным наследованием, и как-то не чувствуется
покажи ка)

п.с. ты видимо перед этим не думал месяц целый над удобством этого чуда как это делал я)) ине придумывал все тщательно)) либо стырил решение у меня либо просто сам додумался до такого же и быстро ) но все ровно смотря на то как выглядит моя функция ты уже автоматически мог слизать её удобство))) но возможно ты этого и не сделал) короче показывай давай
Ответить с цитированием
  #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.
Ответить с цитированием
  #26 (permalink)  
Старый 17.10.2012, 09:25
Аватар для Nekromancer
Профессор
Отправить личное сообщение для Nekromancer Посмотреть профиль Найти все сообщения от Nekromancer
 
Регистрация: 06.05.2009
Сообщений: 1,163

Вот моя реализация, использую в текущем проекте И с миксинами.

https://github.com/NekR/Sync/blob/master/core.js#L41
__________________
Нужно равняться на лучших, а не оправдываться за счёт худших.
Ответить с цитированием
  #27 (permalink)  
Старый 17.10.2012, 09:50
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 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.
Ответить с цитированием
  #28 (permalink)  
Старый 17.10.2012, 16:52
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 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.
Ответить с цитированием
  #29 (permalink)  
Старый 17.10.2012, 17:29
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

macdack,
блин, ещё один Flixabi
Ответить с цитированием
  #30 (permalink)  
Старый 17.10.2012, 17:31
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

Сообщение от melky
они не наследуются.
при чем здесь наследуются или не наследуются, ты сути строчки не понял?
Cat.FAV_CAT_NAME === new Cat().FAV_CAT_NAME // true ?


статические свойства доступны только из конструктора или еще из самого инстанса?

Сообщение от melky
по-моему, это называется грязным хаком
да, но это не лучше чем пихать вспомогательные функции как внутренние МЕТОДЫ обьекта)) не изза того что они там наследуются или еще что-то, а просто из за того что они не являются мтеодами и трудно будет отличить есть метод а что есть вспомогательная функция и ЧАСТь другого метода...


Кстати я понимаю у нас разные цели, но для ООП чье кунфу круче твое или мое)?

мой Class или твой)?

Только обьективно сравни) а так же скорость исполнения))
То есть если не использовать навороты которые есть у меня, а использовать на обеих функциях одно и то же) то где будет удобнее и быстрее)?

Последний раз редактировалось Maxmaxmахimus, 17.10.2012 в 17:37.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как научиться думать на javascript ? samuel Оффтопик 31 03.09.2013 02:10
Как быть онлайн при выключенном ПК в вконтате? vadim90k Оффтопик 18 21.07.2012 13:20
lastChild работает в IE, как тут быть? Puaris83 Firefox/Mozilla 4 17.04.2010 23:56
alert!!! как быть с alert???? gooody jQuery 2 19.02.2010 21:44
Как организовать RichEdit arma Элементы интерфейса 2 18.02.2010 14:57