|
|
|
Объект остаётся на месте. Куда деваются его свойства после первого рефреша таймера?
|
|||
|---|---|---|---|
|
#18+
Помогите снять копии рефреш-функций с прототипа и передать в них параметры соответствующих объектов параметры должным образом. Должно получиться 100%-е клонирование, то есть чтобы в каждой копии помимо всего прочего содержался бы и свой собственный setTimeout. У меня же получается потеря значения после первого рефреша (потери объекта, как мне думалось ранее, оказывается, не происходит, однако ещё неизвестно толком, что это за объект, удерживающийся "в седле", на самом деле). Если ещё точнее, то потеря идёт даже не столько значений, а свойств объекта (id, value и т. п.). Привожу то, что имею. Вопрос: КУДА ДЕВАЮТСЯ СВОЙСТВА С ИХ ЗНАЧЕНИЯМИ и КАК ИХ УДЕРЖИВАТЬ "В СЕДЛЕ"? Вполне возможно, что для сохранения исчезающих параметров нужно их до второго рефреша успеть поместить в массив, а при последующих рефрешах таймера доставать. Я пока не пробовал, но что-то мне подсказывает, что может и не выйти. А если и получится, то вышеозвученный вопрос остаётся в силе (из любознательности). Неужто нельзя без массивов и прочих отягощений? Код: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. Возможно также, что ошибка закралась со все блоки типа: Код: 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 06:03 |
|
||
|
Объект остаётся на месте. Куда деваются его свойства после первого рефреша таймера?
|
|||
|---|---|---|---|
|
#18+
Старайтесь писать кратко, ясно и по существу. Как сообщения, так и исходный код. Объясню что происходит: Код: plaintext 1. 2. дальше при вызове функции как .toString() выполняется строчка: Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 11:37 |
|
||
|
Объект остаётся на месте. Куда деваются его свойства после первого рефреша таймера?
|
|||
|---|---|---|---|
|
#18+
LINUXER Код: plaintext 1. 2. А в этом месте можно поподробнее? Во-первых, что значит функцию? Речь, я так полагаю, идёт про нечто вроде newClonedInstanceFromTemplate = new Counter, а не про function refresher(obj) {..}, что в моём понимании является лишь шаблоном, или образчиком, или так называемым "объектом последующего прототипирования" с целью получения возможности снятия с него будущих копий? LINUXER можно вызвать и глобально и как метод Во-вторых, что в данном случае будет являться методом? Пока я полагаю, что это obj.Counter. Если можно, простейший пример такого вызова. LINUXER экземпляра. В-третьих, моя серость подсказывает мне, что экземпляром можно обозвать как очередной new Counter (т. е. это будет экземпляр-копия с той самой основной function refresher(obj)), так и любой объект DOM, то бишь HTML элемент. LINUXER В первом случае this будет ссылаться на window(глобальный объект), а во втором на созданный Counter. В-четвёртых, интерсно про второе. Надо будет проверить сразу после разъяснений первых трёх пунктов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2007, 07:31 |
|
||
|
Объект остаётся на месте. Куда деваются его свойства после первого рефреша таймера?
|
|||
|---|---|---|---|
|
#18+
Хотя с первым я, похоже, погорячился. Скорее всего имелась в виду именно function refresher(obj). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2007, 07:34 |
|
||
|
Объект остаётся на месте. Куда деваются его свойства после первого рефреша таймера?
|
|||
|---|---|---|---|
|
#18+
c какими-нибудь ООЯП знакомы? BlackNoise В-третьих, моя серость подсказывает мне, что экземпляром можно обозвать как очередной new Counter (т. е. это будет экземпляр-копия с той самой основной function refresher(obj)), так и любой объект DOM, то бишь HTML элемент. да да экземпляр-счётчик - new Counter BlackNoise А в этом месте можно поподробнее? Во-первых, что значит функцию? Речь, я так полагаю, идёт про нечто вроде newClonedInstanceFromTemplate = new Counter, а не про function refresher(obj) {..}, что в моём понимании является лишь шаблоном, или образчиком, или так называемым "объектом последующего прототипирования" с целью получения возможности снятия с него будущих копий? ... Во-вторых, что в данном случае будет являться методом? Пока я полагаю, что это obj.Counter. Если можно, простейший пример такого вызова. Переменная в JS хранит лишь ссылку(указатель) на объект (на функцию). А после такого присвоения (function refresher(obj) {..};Counter.prototype.toString = refresher), и Counter.prototype.toString, и refresher будут ссылаться на одну и ту же функцию. Она не копируется и при создании экземпляра (new Counter). Также как не копируются методы при создании экземпляров класса в Java или C++. Достаточно того что в полях разные данные, и значит функции работают по-разному. Оно для того всё и придуманно, чтобы избежать лишнего копирования=) Пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. PS setTimeout хорош когда нужно вызвать один раз. когда нужно вызывать периодично используется setInterval. иначе получается цепочка вызовов и мысли всякие ...(накопировать много одинаковых функций). Вместо того чтоб копировать intervalId (timeoutId) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2007, 16:28 |
|
||
|
Объект остаётся на месте. Куда деваются его свойства после первого рефреша таймера?
|
|||
|---|---|---|---|
|
#18+
LINUXERc какими-нибудь ООЯП знакомы? Знакомство скорее шапошное. И вопрос бы я задал немного иначе. "Использовал ли я ООП-возможности языка, который в себе их уже содержит?" Сейчас ведь очень много ООЯП, поэтому трудно было не нарваться на один из них, но можно же и 15 лет программировать на таком, при этом ни разу не обратившись к преимуществам ООП. Да, это довольно нелепо и трудно, так как человек волей-неволей развивается и приходит к необходимости задействовать более сложные и прогрессивные финты, нежели использовал до сих пор. Так же и у меня - слегка касался ООП, но понимал мало. В отдельных случаях я мог писать интересный и качественный ООП-код без глубокого понимания основ того, что я делаю. На уровне интуиции и реинжиниринга чужих исходников. Знаю, гнать таких интуитивных программистов надо, дабы не подрывали ряды профессиональных коллег, однако учиться никогда не поздно. А потом, когда язык предоставляет готовые возможности прикрутить встроенный метод или свойство через "." с минимальной и понятной документацией, то многие и останавливаются на этом формальном уровне, полагая, что знают ООП и не догадываясь об истинной природе этого явления. Они не знают, что могут сами создавать и методы, и свойства, и прочее, ещё более сложное и заточенное под ихние нужды. LINUXERPS setTimeout хорош когда нужно вызвать один раз. когда нужно вызывать периодично используется setInterval. Да-да, это все говорят, кое-где я и сам пробовал и то, и это. Но здесь для меня ситуация остаётся до сих пор неоднозначной, а ясность картины портит тот факт, что мне удаётся делать на setTimeout'е то же, что все рекомендуют делать на setInterval'е, не говоря уж об уже готовых професиональных библиотеках, в которых setInterval. Можно при этом предположить, что некорректность использования setTimeout, возникающая при runtime, пока не вылилась во что-то заметное, так что я наивно думаю, будто всё в порядке и в конечном счёте нет никакой разницы в использовании того или иного варианта. Однако, если есть желание удостовериться в некорректности, нужно создать провокационную ситуацию и отловить выскочившие прыщи. Или прозаниматься программированием на этом языке ещё лет пять, пока в один прекрасный день само не вскочит. А создавать искусственно провокационные ситуации - это надо уметь. Может, можно выловить потенциальные баги и иными, более лёгкими способами, но и здесь я не в теме. LINUXERиначе получается цепочка вызовов и мысли всякие ...(накопировать много одинаковых функций). Вместо того чтоб копировать intervalId (timeoutId) [/quot] Ну, вообще-то, за мной ещё несколько вопросов на эту тему (если доживу до этого логически), учитывающих некоторые нюансы. Эти нюансы касаются не только моего кода, но и кода высокопрофессиональных библиотек, где эти нюансы не устранены, несмотря на профессиональность кода и довольно высокие к сегодняшнему дню номера версий (то есть разрабатываются уже давно, но это не спасло их от тех самых нюансов). В остальном - спасибо за весьма грамотные разъяснения, хотя сразу-то не всё понятно, однако суть я уже уловил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2007, 06:03 |
|
||
|
Объект остаётся на месте. Куда деваются его свойства после первого рефреша таймера?
|
|||
|---|---|---|---|
|
#18+
[quote LINUXER] Она не копируется и при создании экземпляра (new Counter). Также как не копируются методы при создании экземпляров класса в Java или C++. Оно для того всё и придуманно, чтобы избежать лишнего копирования=) [/quote] Я так полагаю, что предположение о необходимости копирования прозвучало довольно глупо, так как в таком случае пришлось бы перед использованием предопределённых в языке функций и методов сперва клонировать их, а потом использовать в конкретном куске кода - и так всякий раз, когда нужно получить новый экземпляр предопределённых ресурсов языка. Но ведь так же не делается. Делается просто: нужно воспользоваться функцией получения текущего времени - берёшь и сразу же используешь, разве что разные параметры подставляешь. Однако, недаром же в некоторых случаях всё-таки подставляют new перед использованием той или иной встроенной функции времени... Получается, что нет никакого противоречия, так как new вроде как и не осуществляет копирования? Тогда что же - создание нового экземпляра объекта или функции для появления потенциальной возможности заполнения индивидуальными параметрами нового экземпляра? Ух, уже чувствую, что захожу в дебри... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2007, 06:14 |
|
||
|
Объект остаётся на месте. Куда деваются его свойства после первого рефреша таймера?
|
|||
|---|---|---|---|
|
#18+
BlackNoise Я так полагаю, что предположение о необходимости копирования прозвучало довольно глупо, так как в таком случае пришлось бы перед использованием предопределённых в языке функций и методов сперва клонировать их, а потом использовать в конкретном куске кода - и так всякий раз, когда нужно получить новый экземпляр предопределённых ресурсов языка. Но ведь так же не делается. Делается просто: нужно воспользоваться функцией получения текущего времени - берёшь и сразу же используешь, разве что разные параметры подставляешь. Однако, недаром же в некоторых случаях всё-таки подставляют new перед использованием той или иной встроенной функции времени... Получается, что нет никакого противоречия, так как new вроде как и не осуществляет копирования? Тогда что же - создание нового экземпляра объекта или функции для появления потенциальной возможности заполнения индивидуальными параметрами нового экземпляра? Ух, уже чувствую, что захожу в дебри... new вызывает конструктор, в котором и определяются начальные свойства объекта. В конструктор можно передавать параметры. По сути function Counter(){} и есть конструктор. new Date() (js) запоминает дату на момент создания. и теперь её можно получать в разных форматах, или инфу о ней http://structuralist.narod.ru/it/internet/oop.htm http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1186 У JS много особенностей (интерпретируемый, вместо классов прототипы) про js в другой вашей ветке давал ссылку на наблы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2007, 08:49 |
|
||
|
|

start [/forum/topic.php?fid=22&gotonew=1&tid=1457768]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
167ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 516ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...