Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.08.2011, 23:01
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

выложенные обьекты
привет, проблема такая.
a={
         z:"100",         
         y:{
              x:function (){
                 alert(this.z);
              }
         } 
}


Вопрос как сделать так чтобы функция x() обьекта Y получила доступ к обьекту z класса A.

ей вызов должен соответственно выглядеть так: a.y.x();
а результатом должно быть диалоговое окно с текстом 100
Ответить с цитированием
  #2 (permalink)  
Старый 19.08.2011, 23:17
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

var a = {
  z: 100,
  y: { 
    x:function (){ 
      alert(this.z); 
    }
  }
};

a.y.x.call( a );
Ответить с цитированием
  #3 (permalink)  
Старый 19.08.2011, 23:33
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Спасибо прекрасный пример. Но это немного не то.
мне нужно организовать api, к примеру.

Window.caption.setText("заголовок окна");


setText должен обратится в процессе работы к свойствам обьекта Window.

к сожалению если Api функции придётся вызывать так:
Window.caption.setText.call(Window)

то есть вероятность что меня побьют другие программисты ))))

Последний раз редактировалось DjDiablo, 19.08.2011 в 23:35.
Ответить с цитированием
  #4 (permalink)  
Старый 19.08.2011, 23:52
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

одно решение я нашёл.

function uis(self){
   this.self=self; 
   this.test=function(){
        alert(this.self.slf);        
   }                                   
};

$.Controller.extend("widget",{    
    slf:"hello ui",    
//    ui:new uis(this),                
    init: function(el){
       this.ui=new uis(this);       
    }         
});


в данном примере создаётся обьект widget, он наследует свойства обьекта Controller.В событии init который вызывается при создании экземпляра, я добавляю к widget свойство UI которому присваивается обьект возвращаемый конструктором uis. В свою очередь конструктору uis передаётся ссылка на widget, которой он потом и оперирует.

теперь я могу написать что то вроде widget.ui.test();
и получить Hello UI.

В этом варианте очень не нравится вызов конструктора uis при создании экземпляров widget. Совсем не хочется за удобство api платить скоростью.

Последний раз редактировалось DjDiablo, 20.08.2011 в 00:00.
Ответить с цитированием
  #5 (permalink)  
Старый 20.08.2011, 00:10
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Можно и без конструктора:
var widget = {
  slf: "hello ui",
  ui: {
    test: function(){
      alert( this.self.slf );
    }
  }
};
widget.ui.self = widget;

widget.ui.test();
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск