Эффект статических переменных в функции
Как реализовать подобие статических (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, время: 09:00. |