выложенные обьекты
привет, проблема такая.
a={ z:"100", y:{ x:function (){ alert(this.z); } } } Вопрос как сделать так чтобы функция x() обьекта Y получила доступ к обьекту z класса A. ей вызов должен соответственно выглядеть так: a.y.x(); а результатом должно быть диалоговое окно с текстом 100 |
var a = { z: 100, y: { x:function (){ alert(this.z); } } }; a.y.x.call( a ); |
Спасибо прекрасный пример. Но это немного не то.
мне нужно организовать api, к примеру. Window.caption.setText("заголовок окна"); setText должен обратится в процессе работы к свойствам обьекта Window. к сожалению если Api функции придётся вызывать так: Window.caption.setText.call(Window) то есть вероятность что меня побьют другие программисты )))) |
одно решение я нашёл.
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 платить скоростью. |
Можно и без конструктора:
var widget = { slf: "hello ui", ui: { test: function(){ alert( this.self.slf ); } } }; widget.ui.self = widget; widget.ui.test(); |
Часовой пояс GMT +3, время: 17:07. |