Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблема с контекстом переменных
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Проблема с контекстом переменных

Страниц (1): [1]
 

1. Longi - 26 Апреля, 2012 - 09:21:40 - перейти к сообщению
Здравствуйте всем, у меня такая задача. Я создаю коллекцию объектов, разных классов, но не готовых для использования. Паралельно создаются функции которые создают уже готовые объекты. Лучше я выложу код чтоб было понятней.
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. Widget = (function() {
  3.     var Class, self = {};
  4.    
  5.     self.Class = function() {
  6.         return Class;
  7.     }
  8.    
  9.     self.init =  function(_class) {
  10.         Class = _class || 'item';
  11.     }
  12.     return self;
  13. })();
  14.  
  15. WidgetWrap = function() {
  16.     var self = {};
  17.     self.Class = function(){
  18.         return Widget.Class.apply(self, arguments);
  19.     }
  20.    
  21.     Widget.init.apply(self, arguments);
  22.     return self;
  23. }
  24.  
  25. widget1 = WidgetWrap('widget1');
  26. widget2 = WidgetWrap('widget2');
  27.  
  28. console.log(widget1.Class()); //widget2
  29. console.log(widget2.Class()); //widget2
  30.  


Но вот проблема объкты получаются одинаковыми. Я так понял это изза того что Class которая используется, она создается в глобальном контексте.
Подскажите пожалуста что делать....
2. Longi - 26 Апреля, 2012 - 13:05:19 - перейти к сообщению
Все, я уже понял что это невозможно)) т.к. Чтобы в двух объектах переменная Class была разной она должна находится в разных контекстах, а она находится в одном контексте, и оба объекты-оболочки обращаются к ней.

Но у меня вопрос теперь другой. Если организовать все по такому принципу, будет ли кушаться меньше памяти?
3. IllusionMH - 26 Апреля, 2012 - 13:48:20 - перейти к сообщению
Longi, мне кажется, что Widget.init должен возвращать какой-нить объект, а не просто менять значение переменной в замыкании.
Вот тогда widget1 и widget2 не будут связаны между собой

 

Powered by ExBB FM 1.0 RC1