Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 27.07.2014, 04:40
Аватар для ixth
Профессор
Отправить личное сообщение для ixth Посмотреть профиль Найти все сообщения от ixth
 
Регистрация: 19.01.2010
Сообщений: 354

Сообщение от andypop Посмотреть сообщение
RunEndFetch - диспатчит сигнал EndFetch и передает ему имя функции и результат фетча в объект для последующей обработки в хэндлере onEndFetch. Я пишу с большой, чтобы отличить запуск сигнала от других функций. Мне так хочется.
Привет! Имхо, эвенты, хэндлеры, сигналы, слоты — это все какой-то оверинжиниринг. Все делается гораздо, гооораздо проще:

function FunctionNameExtractorFactoryError () {
	this.name = 'FunctionNameExtractorFactoryError';
}

FunctionNameExtractorFactoryError.prototype = Object.create(Error.prototype);

function FunctionNameExtractorFactory () {
	return this;
}

FunctionNameExtractorFactory.buildFunctionNameExtractorInstance = function () {
	return FunctionNameExtractorFactory.commonFunctionNameExtractor;
};

FunctionNameExtractorFactory.commonFunctionNameExtractor = function (fn) {
	if (!fn instanceof Function) {
		throw new TypeError('argument \'fn\' is not instance of Function');
	}

	if (fn.name) {
		return fn.name;
	} else {
		return FunctionNameExtractorFactory.fallbackFunctionNameExtractor(fn);
	}
};

FunctionNameExtractorFactory.fallbackFunctionNameExtractor = function (fn) {
	if (!fn instanceof Function) {
		throw new TypeError('argument \'fn\' is not instance of Function');
	}

	try {
		var source = (fn.toSource || fn.toString).call(fn);
	} catch (e) {
		if (e instanceof TypeError) {
			throw new FunctionNameExtractorFactoryError('Can\'t get function name due unknown malfunction.');
		} else {
			throw e;
		}
	}

	var match = source.match(/function(?:\s+(.*?))?(?=\()/);
	return match ? match[1] : null;
};

FunctionNameExtractorFactory.prototype.buildFunctionNameExtractorInstance = function () {
	return this.constructor.buildFunctionNameExtractorInstance();
};


Вызывать так:
var functionNameExtractorFactory = new FunctionNameExtractorFactory();
var functionNameExtractor = functionNameExtractorFactory.buildFunctionNameExtractorInstance();
functionNameExtractor(arguments.callee);

Последний раз редактировалось ixth, 27.07.2014 в 04:44.
Ответить с цитированием
  #22 (permalink)  
Старый 27.07.2014, 14:02
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Изначально наверно имелось в виду имя метода а не имя функции. И скорее всего для того что бы иметь возможность перегрузить этот метод это вроде как зеркалированием называется т.е.
var Obj = {};
Obj.methodName = function functionName (){ retutn Obj }

К сожалению внутри functionName() довольно сложно получить Obj.methodName

А возможность перегружать методы весьма и весьма полезная штука
Ну например есть желание последовательно выполнять кучу анимаций ..
Обычно бля этого используют функции обратного вызова т.е.
Element.moveLefr ({
         speed:10;
         time: 1000;
         success : function (e){
                 e.moveAp ({
                       speed:10;
                       time: 1000;
                       success : function (e){
                           ....... //( и.т.д и.т.п )
                       }
                 })       
         }})

Но если есть возможность перегрузить функции moveLefr и moveAp можно писать проще

Element.moveLefr(10,1000).moveLefr(30,2000)   // и.т.д.


Для этого требуется что бы moveLefr() не выполняла анимацию а просто запомнила свое имя и правильно разместила себя в очереди анимации и вернула объект у которого есть метод moveLefr() т.е. вернула родительский объект у которого определены все методы

Последний раз редактировалось MallSerg, 27.07.2014 в 14:17.
Ответить с цитированием
  #23 (permalink)  
Старый 27.07.2014, 15:15
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

этот метод, moveLefr, и его вызов, они отвратительны, нет?

похоже, что через все попытки сделать нормальный инструмент для анимации, ни у кого это так и не получилось ....
Ответить с цитированием
  #24 (permalink)  
Старый 27.07.2014, 15:26
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от melky Посмотреть сообщение
похоже, что через все попытки сделать нормальный инструмент для анимации, ни у кого это так и не получилось ....
Ну почему, мне кажется, что http://processingjs.org/learning/ сделали хороший инструмент. Никаких уродских колбеков и прочего, язык заточен под написание анимаций и интерактива.
__________________
kobezzza
code monkey
Ответить с цитированием
  #25 (permalink)  
Старый 27.07.2014, 15:42
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Сообщение от melky
этот метод, moveLefr, и его вызов, они отвратительны, нет?
Лично мне не нравятся цепочки callback вызовов особенно когда их больше пары десятков

Тут больше вопрос в том что довольно сложно получить имя метода из самого метода.

Единственный известный мне способ это сравнивание arguments.callee с методами объекта что выглядит довольно ужасно
Ответить с цитированием
  #26 (permalink)  
Старый 28.07.2014, 11:19
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от kobezzza Посмотреть сообщение
Ну почему, мне кажется, что http://processingjs.org/learning/ сделали хороший инструмент. Никаких уродских колбеков и прочего, язык заточен под написание анимаций и интерактива.
в "интересные ссылки" кидал ссыль на язык анимации. декларативный

http://motorcortexjs.com/

и... оно тоже косячное

т.е. замешая микстуру из вышеупомянутого двига, processingjs, Web Animations можно сделать что-нибудь интересное. не без косяков, конечно

Сообщение от MallSerg
Лично мне не нравятся цепочки callback вызовов особенно когда их больше пары десятков
Promise ?
Ответить с цитированием
  #27 (permalink)  
Старый 25.12.2020, 01:24
Аватар для Pinkierar
Новичок на форуме
Отправить личное сообщение для Pinkierar Посмотреть профиль Найти все сообщения от Pinkierar
 
Регистрация: 25.12.2020
Сообщений: 1

Сообщение от Kolyaj Посмотреть сообщение
Хотя бред какой-то, узнавать имя функции внутри нее самой.
Вот я так использую, почему это плохо?
let item = {
	value: false,
	setItem: function(value) {
		item.value = value;
	},
	checkItem: function(funcName) {
		if (!item.value)
			console.error('Функция "%s" получила не присвоенное значение', funcName);
	},
	add: function(value) {
		item.checkItem(arguments.callee.name);
		item.value = item.value + value;
	},
	subtract: function(value) {
		item.checkItem(arguments.callee.name);
		item.value = item.value - value;
	},
	clear: function() {
		item.checkItem(arguments.callee.name);
		item.value = false;
	},
	getItem: function() {
		item.checkItem(arguments.callee.name);
		return item.value;
	}
};
item.clear();

Функция "clear" получила не присвоенное значение
Ответить с цитированием
  #28 (permalink)  
Старый 25.12.2020, 08:02
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

В строгом режиме не будет работать.
В модулях
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
Как узнать, завершила ли свою работу рекурсивная функция Ajax Общие вопросы Javascript 4 13.05.2009 14:50
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00
Как проверить существование функции Aderba Общие вопросы Javascript 2 14.11.2008 16:09
владелец функции diagnost Общие вопросы Javascript 6 30.10.2008 15:04