Комментарии 14
А что конкретно тут нового?
+1
Курите мануалы, читайте классиков. Дугласа Крокфорда в первую очередь. Много вам открытий чудных готовит этот просвещенья труд. И вот еще:
dklab.ru/chicken/nablas/38.html
dklab.ru/chicken/nablas/39.html
dklab.ru/chicken/nablas/40.html
dklab.ru/chicken/nablas/38.html
dklab.ru/chicken/nablas/39.html
dklab.ru/chicken/nablas/40.html
-3
Не надо рекомендовать статью Котерова про наследование в Javascript, он сам от неё отрёкся.
+1
Я фигею, минусуют статью по программированию. Не я конечно понимаю есть к чему придратся, но последнее время их так мало что жалко же
0
ну, статья достаточно слабенькая, ничего нового. у того же Джона Резига есть дофига интересных вещей. да и не статья это, а пример кода, который можно было бы и объяснить.
начнём с того, что совершненно не факт, что добавлена функция. туда можно добавить что угодно. например, строку или число. или любой объект, но не пустую строку или не 0, потому что она тогда вернёт false. потому этот кусок можно было бы переписать так:
Более того, если функция не добавлена — вернётся не false, а undefined. Потому в конце можно было бы написать return false;
Но на самом деле она не совсем правильная. Вот кто-то определил нашей функции fn.uuid как 'hahaha'. И все — ф-ция не добавится и не потому что она там уже есть, а потому что так получилось. В идеале она должна быть чем-то типа такого:
А в чём идея поста? Уверен, что John Resig, когда это писал — указывал это в какому-то контексте, а не просто так, чтобы показать трюк. Вот этого контекста тут и не хватает.
А статьи по программированию хорошие на Хабре, хоть и редко, но встречаются. Эта к ним — не относится. ;)
начнём с того, что совершненно не факт, что добавлена функция. туда можно добавить что угодно. например, строку или число. или любой объект, но не пустую строку или не 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, когда это писал — указывал это в какому-то контексте, а не просто так, чтобы показать трюк. Вот этого контекста тут и не хватает.
А статьи по программированию хорошие на Хабре, хоть и редко, но встречаются. Эта к ним — не относится. ;)
0
еще забыл добавить тест один:
assertThrow( store.add( 'string' ), 'Function.Expected.Exception');
0
контекст этой штуки простой, допустим в вашем модуле есть несколько методов init, load,save etc, и вы хотите дать другим модулям возможность выполнять какие то действия до или после кода метода (onSaving, onSaved etc), вот что бы хранить набор пользовательских функций которые будут вызываться и удобно их добавлять удалять этот код оказался очень удобен
0
и еще — этой статье уже восьмой месяц пошёл.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Functions are almost objects