Эффект статических переменных в функции
Как реализовать подобие статических (C, Pascal) переменных в функции?
Например - подсчёт числа вызовов самой функции. |
<html> <head> <script type="text/javascript"> var f = function() { var staticVar = 0; return function() { alert( "Function was called " + ++staticVar + " times" ); } }(); </script> </head> <body> <input type="button" value="+" onclick="f()"> </body> </html> |
Можно и так:
function somefunc() { somefunc.n = somefunc.n ? somefunc.n + 1 : 1; } somefunc.n = 0; // чтобы не заморачиваться с undefined somefunc(); somefunc(); somefunc(); alert(somefunc.n); // => выведет 3 |
rgl, спасибо. Хотя в реальной ситуации, придётся писать целый объект со всеми операциями - изврат :-E
|
jsgeek, спасибо, это проще, хотя тоже непривычно после "нормальных" языков, и я так понимаю есть проблема с открытостью n для доступа из-вне функции.
|
jsjob, функции в javascript являются объектами. К ним можно добавлять свойства и методы.
Пример: function newfunc() {}; newfunc.x = 1; newfunc.y = 2; newfunc.someMethod = function () { return this.x + this.y } Они будут доступны с объекта данной функции. Пример newfunc.someMethod(); // => 3 newfunc.x = 10; newfunc.y = 11; newfunc.someMethod(); // => 21 Они доступны как для чтения так и для записи. Недоступными для записи их можно сделать с помощью замыканий или введенных в ECMAScript 5 атрибутов свойств. Хотя с замыканием ничто не помешает сделать так: newfunc.closure(); newfunc.closure = function() { 'Ха-ха. Я злобный хакер!'} Это могут исправить атрибуты свойств, но они не доступны повсеместно |
Спасибо.
Тему можно прикрыть, пока нет возможности досконально в этом разобраться. |
Часовой пояс GMT +3, время: 21:46. |