Добавление индивидуальных свойств к функции
Всем привет,
Есть функция, которая делает элемент прозрачным (плавно). Соответственно хочу добавить ей свойство "в работе". И чтобы каждый экземпляр вызванной функции имел это свойство для проверки. function fade(arg1,arg2,arg3) { ... } function initFade() { var fd1 = fade, fd2 = fade; fd1(arg1,arg2,arg3); alert(fd1.running + " " + fd2.running); // true false } initFade(); В общем как-то так, надеюсь логику работы поняли и сможете мне подсказать как правильно реализовать данный замысел... |
Цитата:
Цитата:
|
Цитата:
function fn() { fn.prop = "свойств"; } fn.propNew = "текст из "; fn(); alert(fn.propNew + fn.prop); // текст из свойств Цитата:
function makeCounter() { var currentCount = 0; return function() { currentCount++; return currentCount; }; } var counter = makeCounter(); // каждый вызов увеличивает счётчик counter(); counter(); alert( counter() ); // 3 var c1 = makeCounter(); var c2 = makeCounter(); alert( c1() ); // 1 alert( c2() ); // 1, счётчики независимы Похоже, что все есть... Возможно, вы знаете способ проверки на работу функции получше, чем придумал я? |
Цитата:
Сделал уже через замыкание, но вдруг кто знает как связать со свойствами или еще более лучшее решение... |
Цитата:
Теперь не придется лишний раз выполнять функцию для возврата переменной. |
Цитата:
Это только копирование ссылки на объект. Да и свойства те, не свойства функции... Это свойства объекта ссылка на который хранится в той же переменной, что и на функцию. |
Хотя из первоисточника
Цитата:
Т.ч. свойства есть. :yes: Но экземпляры делает только new или нечто аналогичное... |
Цитата:
function SomeFn() { this.someMethod = function() { alert("hi"); }; } var someFunction = new SomeFn; someFunction.someMethod(); или function someFn() { function sfn() { return; } sfn.someMethod = function() { alert("hi"); } return sfn; } var someFunction = someFn(); someFunction.someMethod(); |
Цитата:
Что есть "лучше"? Например есть несколько вариантов реализации нужного тебе эффекта... Какой лучше? - работает быстрее? - текст реализации выглядит понятнее, симпатичнее? - менее ресурсоемок? |
Цитата:
1 объект/экземпляр и две переменные со ссылкой на него... Цитата:
|
Цитата:
|
Цитата:
Но с new оно как-то по коду лучше и явно представлено... |
Минусы объекта:
- this. надо сохранять перед передачей в setTimeout - при вызове метода из SetTimeout надо обрамлять в function(){ } // Решается добавлением "var savedThis = this;" в начало функции и последующем использовании savedThis вместо this. (не уверен в кроссбраузерности) Пример: function SomeFn() { this.info = "Если видно, значит инфо доступно"; this.someShow = function() { var savedThis = this; setTimeout(function(){ alert(savedThis.info); }, 10); // Если написать this.info, получим undefined }; } var someFunction = new SomeFn; setTimeout(function(){ someFunction.someShow(); }, 10); // Если написать setTimeout(someFunction.someShow, 10), получим undefined PS: По скорости разницы с замыканием при тестах не заметил... |
ExeiL, вот и думай что есть для тебя "лучше"... :)
|
Цитата:
Когда надо будет использовать функцию напрямую - замыкание, когда не надо - объект) |
Часовой пояс GMT +3, время: 23:00. |