Добавление индивидуальных свойств к функции
Всем привет,
Есть функция, которая делает элемент прозрачным (плавно). Соответственно хочу добавить ей свойство "в работе". И чтобы каждый экземпляр вызванной функции имел это свойство для проверки.
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, время: 04:38. |