Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   выложенные обьекты (https://javascript.ru/forum/misc/20851-vylozhennye-obekty.html)

DjDiablo 19.08.2011 23:01

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


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

ей вызов должен соответственно выглядеть так: a.y.x();
а результатом должно быть диалоговое окно с текстом 100

Sweet 19.08.2011 23:17

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

a.y.x.call( a );

DjDiablo 19.08.2011 23:33

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

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


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

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

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

DjDiablo 19.08.2011 23:52

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

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 платить скоростью.

Sweet 20.08.2011 00:10

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

widget.ui.test();


Часовой пояс GMT +3, время: 17:07.