Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Почему не видна переменная?
|
|||
|---|---|---|---|
|
#18+
Имеется такой фрагмент кода jQuery-плагина: Код: javascript 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. Во время работы сначала вызывается функция init, которая, казалось бы, должна инициализировать переменную settings, заданную во второй строке, но этого не происходит. При последующем вызове функции setColor выдаётся сообщение "settings is undefined". Почему? Ведь settings определена во внешней для init и setColor функции, значит, по правилам видимости Javascript, должна быть в них видима и доступна. Если же задать какое-то начальное значение для settings, то при вызове init оно не меняется. Получается, что при вызове init в строке Код: javascript 1. создаётся новая переменная settings, Но почему?! И как сделать так, чтобы работала именно переменная settings, объявленная во второй строке данного фрагмента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 00:34 |
|
||
|
Почему не видна переменная?
|
|||
|---|---|---|---|
|
#18+
maxapet, Так у Вас при каждом вызове заново создаются все внутренние переменные и функции. Можно сделать немедленно выполняемую функцию / функцию-выражение : ( function(){... return obj; } )(), которая будет создавать объект для доступа к внутренним контекстным переменным-объектам methods, init и т.д. Например, тот код, который у Вас внизу (под комментарием "// немного магии"), сделать в виде возвращаемой функции - объявления. $.fn.colorPicker = ( function(){... return function(method) {...}; } )(); а уже потом вызывать как $.fn.colorPicker(method); Можно передавать параметры для инициализации ( function(){... return function(method) {...}; )(param1,param2,...), как-то так это делается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 06:01 |
|
||
|
Почему не видна переменная?
|
|||
|---|---|---|---|
|
#18+
бухалтер фантоцци, спасибо. Похоже, действительно, проблема в том, что когда я вызываю методы класса colorPicker, например, так Код: javascript 1. то в этот момент переменная settings, объявленная во второй строке, создаётся заново. А вот дальнейшее я не понял. Объясните, пожалуйста, с примером. P.S. Если я объявлю settings вне тела функции $.fn.colorPicker, то она становится единственной для всех экземпляров этого плагина, а мне нужно, чтобы у каждого экземпляра были собственные настройки. А если её объявить, например, в методе init, то её не видит метод setColor, что вполне естественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 07:07 |
|
||
|
Почему не видна переменная?
|
|||
|---|---|---|---|
|
#18+
бухалтер фантоцци, спасибо ещё раз за совет. Решил проблему использованием метода data из jQuery, Индивидуальные настройки хранятся в нём. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 09:15 |
|
||
|
Почему не видна переменная?
|
|||
|---|---|---|---|
|
#18+
maxapetА вот дальнейшее я не понял. Объясните, пожалуйста, с примером. Код: javascript 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 14:30 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=39253970&tid=1445201]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
65ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 148ms |

| 0 / 0 |
