15.12.2011, 13:43
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от nerv_
|
Объясните, пожалуйста, на примере вашей первой функции, как сделать так, чтобы в глобальной области видимости находилась только одна функция, а не кол-во функций + кол-во глобальных переменных?
|
Через анонимную ф-цию:
var global, globalMethod; // объявляем глобальные переменные
(function(){ // создаём анонимную ф-цию
var local= 2; // локальная переменная
global= 3;
globalMethod= function() {
alert(local + " + " + global + " = " + (local+global));
};
})() // вызываем анонимную ф-цию
globalMethod();
alert(local);
|
|
15.12.2011, 17:26
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
trikadin, очередное мерси Вроде как пример простой и на первый взгляд понятный, но я все равно пару раз прогнал его в отладчике пошагово, чтобы в голове отложилось Кажется, понял, почему у меня не получалось) Если не ошибаюсь, тут используется т.н. "статическая приватная" переменная благодаря замыканию анонимной ф-ции на globalMethod.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 15.12.2011 в 17:42.
|
|
15.12.2011, 17:30
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Полезно будет почитать про фабрики объектов - суть примерно та же.
|
|
16.12.2011, 07:14
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от nerv_
|
Объясните, пожалуйста, на примере вашей первой функции, как сделать так, чтобы в глобальной области видимости находилась только одна функция, а не кол-во функций + кол-во глобальных переменных?
|
Вариант всё тоже самое но все переменные и функции в одном обьекте ...
<html>
<head>
<meta charset="utf-8">
<style type="text/css">
body { background-color:#ffcc33; margin:0px; }
div { color:#0033cc; font:bold 12pt Tahoma; margin:15px; }
</style>
<script type="text/javascript">
var T = {
n: null,
s: new Date,
f: 1,
t: new Date,
Timer: function () {
T.t = new Date(T.t.getTime() + T.f * ((new Date).getTime() - T.s.getTime()));
document.getElementsByTagName("div")[0].innerHTML = T.t.toLocaleTimeString();
T.s = new Date;
T.n = setTimeout(function () {
T.Timer()
}, 500)
},
New_start: function () {
clearTimeout(T.n);
T.t.setHours(0, 0, 0, 0);
T.s = new Date;
T.Timer()
},
Pause: function () {
T.s ? (clearTimeout(T.n), T.s = "") : (T.s = new Date, T.Timer())
},
BackTimer: function () {
clearTimeout(T.n);
T.f = -T.f;
T.s = new Date;
T.Timer()
},
Set: function () {
var a = parseInt(document.getElementById("sec").value, 10) || 0;
T.t.setHours(0, 0, a, 0);
document.getElementsByTagName("div")[0].innerHTML = T.t.toLocaleTimeString()
}
};
</script>
</head>
<body>
<input type="button" onclick="T['New_start']()" value="Start/New">
<input type="button" onclick="T['Pause']()" value="Pause/Go">
<input type="button" onclick="T['BackTimer']();" value="BackTimer">
<input type="button" onclick="T['Set']();" value="Set">
<label><input type="text" value="30" id="sec">sec</label>
<div>Div HTML</div>
</body>
</html>
|
|
16.12.2011, 07:59
|
|
Профессор
|
|
Регистрация: 10.12.2011
Сообщений: 290
|
|
я ща спать, а завтра сделаю самый лучший таймер из всех возможных))
|
|
16.12.2011, 08:03
|
Профессор
|
|
Регистрация: 15.03.2011
Сообщений: 353
|
|
Это невозможно! Нужно тогда брать конкретное время, и отсчитывать.
|
|
16.12.2011, 14:38
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от Solovei95
|
Это невозможно! Нужно тогда брать конкретное время, и отсчитывать.
|
Что невозможно-то? Тут уже всё сделали)
|
|
16.12.2011, 15:34
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
рони, благодарю! Разрешите полюбопытствовать, почему Вы обращаетесь к методам этим способом
<input type="button" onclick="T['New_start']()" value="Start/New">
// а не этим?
<input type="button" onclick="T.New_start();" value="Start/New">
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
16.12.2011, 15:51
|
|
Профессор
|
|
Регистрация: 10.12.2011
Сообщений: 290
|
|
Сообщение от nerv_
|
рони, благодарю! Разрешите полюбопытствовать, почему Вы обращаетесь к методам этим способом
<input type="button" onclick="T['New_start']()" value="Start/New">
// а не этим?
<input type="button" onclick="T.New_start();" value="Start/New">
|
привычка наверное))
|
|
16.12.2011, 15:53
|
|
Модератор
|
|
Регистрация: 27.04.2010
Сообщений: 3,417
|
|
Сообщение от Livanderiaamarum
|
привычка наверное))
|
Ну, так ещё делается для борьбы с обфускацией названий методов. Хотя в атрибуте это неоправданно,имхо.
|
|
|
|