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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с контекстом переменных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Longi
Отправлено: 26 Апреля, 2012 - 09:21:40
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Здравствуйте всем, у меня такая задача. Я создаю коллекцию объектов, разных классов, но не готовых для использования. Паралельно создаются функции которые создают уже готовые объекты. Лучше я выложу код чтоб было понятней.
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 которая используется, она создается в глобальном контексте.
Подскажите пожалуста что делать....
 
 Top
Longi
Отправлено: 26 Апреля, 2012 - 13:05:19
Post Id


Новичок


Покинул форум
Сообщений всего: 24
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Все, я уже понял что это невозможно)) т.к. Чтобы в двух объектах переменная Class была разной она должна находится в разных контекстах, а она находится в одном контексте, и оба объекты-оболочки обращаются к ней.

Но у меня вопрос теперь другой. Если организовать все по такому принципу, будет ли кушаться меньше памяти?
 
 Top
IllusionMH
Отправлено: 26 Апреля, 2012 - 13:48:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Longi, мне кажется, что Widget.init должен возвращать какой-нить объект, а не просто менять значение переменной в замыкании.
Вот тогда widget1 и widget2 не будут связаны между собой
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB