Как стать автором
Обновить

Комментарии 14

А что конкретно тут нового?
Не надо рекомендовать статью Котерова про наследование в Javascript, он сам от неё отрёкся.
вообще в указаных статьях есть такие неприятные неточности, что я бы вообще никому их не давал смотреть
Я фигею, минусуют статью по программированию. Не я конечно понимаю есть к чему придратся, но последнее время их так мало что жалко же
ну, статья достаточно слабенькая, ничего нового. у того же Джона Резига есть дофига интересных вещей. да и не статья это, а пример кода, который можно было бы и объяснить.

начнём с того, что совершненно не факт, что добавлена функция. туда можно добавить что угодно. например, строку или число. или любой объект, но не пустую строку или не 0, потому что она тогда вернёт false. потому этот кусок можно было бы переписать так:
return !!(store.cache[fn.uuid] = fn);
// =>
store.cache[fn.uuid] = fn;
return !!fn;


Более того, если функция не добавлена — вернётся не false, а undefined. Потому в конце можно было бы написать return false;

Но на самом деле она не совсем правильная. Вот кто-то определил нашей функции fn.uuid как 'hahaha'. И все — ф-ция не добавится и не потому что она там уже есть, а потому что так получилось. В идеале она должна быть чем-то типа такого:

var Store = (function () {

	var store = [];

	return {
		add : function (fn) {
			if (typeof fn !== 'function') throw 'Function.Expected.Exception'
			if (store.contains(fn)) return false;
			
			store.push(fn);
			return store.length - 1;
		},
		get : function (uuid) {
			return store[uuid];
		}
	};

})();

function ninja(){}
// надо сравнивать через ===, потому что (0 == false)
assert( store.add( ninja ) !== false, "Function was safely added." );
assert( store.add( ninja ) === false, "But it was only added once." );


А в чём идея поста? Уверен, что John Resig, когда это писал — указывал это в какому-то контексте, а не просто так, чтобы показать трюк. Вот этого контекста тут и не хватает.

А статьи по программированию хорошие на Хабре, хоть и редко, но встречаются. Эта к ним — не относится. ;)
еще забыл добавить тест один:
assertThrow( store.add( 'string' ), 'Function.Expected.Exception');

контекст этой штуки простой, допустим в вашем модуле есть несколько методов init, load,save etc, и вы хотите дать другим модулям возможность выполнять какие то действия до или после кода метода (onSaving, onSaved etc), вот что бы хранить набор пользовательских функций которые будут вызываться и удобно их добавлять удалять этот код оказался очень удобен
посмотрите мои топики, вы думаете я не знаю основ джаваскрипта? для того примера, который вы назвали удобно много разных подходов, но не этот ;)
и дело не в том, что меня интересует контекст. а в том, что без контекста этот участок малопонятен.
И вы не подумайте, у меня не было цели вас обидеть. Просто josser искренне недоумевал, почему статья не выстрелила и я ему постарался объяснить. Не обижайтесь)
уж что что а обижаться точно в мыслях не было
и еще — этой статье уже восьмой месяц пошёл.
и правда как вы ее вообще откапали, и кстати взято в общем именно у Резига
josser вывел её в «Прямой эфир» 18 ноября 2010 в 21:21.
я видело, что взято у Резига. Без контекста — не интересно. объяснил просто человеку, который удивлялся, за что её заминусовали
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации