Javascript объект путаницы - PullRequest
1 голос
/ 12 мая 2009

Я хорошо запутался здесь. Мой сценарий таков.

function DesignPad() {  
 function EditBar() {  
  ...  
  this.removeHandler = function() {  
    **// how do I call Dragger.removeAsset**  
  }  
 }  
 function Dragger(){  
  ...  
  this.removeAsset = function() {}  
 }  
 this.init = function() {  
  this.editBar = new EditBar();  
  this.dragger = new Dragger();  
 }  
}  

var dp = new DesignPad();  
...

Я не могу вызвать Dragger.RemoveAsset. Я понимаю, почему, мой вопрос, как я это называю?

Я пытаюсь разделить подобные вещи (например, Dragger / EditBar), но мне кажется, что в моих обработчиках событий все перепутано. Любые предложения, хорошие материалы для чтения и т. Д. На этот материал?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 12 мая 2009

Я нашел Javascript Дугласа Крокфорда как лучшее введение в JavaScript. Особенно видео для Yahoo, например: Язык программирования JavaScript , где вы можете узнать, как именно объекты создаются и наследуются в JS.

Решение вашей проблемы:

function DesignPad() {  
  var that = this;
 function EditBar() {  
  this.removeHandler = function() {  
    print("RemoveHandler");
    that.dragger.removeAsset();
  }  
 }  
 function Dragger() {  
  this.removeAsset = function() {
    print("RemoveAsset");
  }  
 }  
 this.init = function() {  
  this.editBar = new EditBar();  
  this.dragger = new Dragger();  
 }
}  

var dp = new DesignPad();
dp.init();
dp.editBar.removeHandler();

Но, как заметили другие, вы могли бы изменить некоторые вещи:).

0 голосов
/ 12 мая 2009

Попробуйте это:

function DesignPad() {  

 function EditBar(s) {  
  super = s;
  this.removeHandler = function() {
    alert('call 1'); 
    super.dragger.removeAsset();  
  }  
 } 


 function Dragger(s){
  super = s;  
  this.removeAsset = function() {
      alert('call 2'); 
    }  
 }  

 this.init = function() {  
  this.editBar = new EditBar(this);  
  this.dragger = new Dragger(this);  
 }  

}  

var dp = new DesignPad(); 
dp.init()
dp.editBar.removeHandler();
alert('end');
0 голосов
/ 12 мая 2009

Является ли экземпляр Dragger 'свойством' вашего объекта DesignPad? Если это так, вы можете передать ссылку на этот объект в свой метод removeHandler ().

0 голосов
/ 12 мая 2009

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

Я думаю, что ваша проблема связана с тем, что вложенная функция является закрытой, поэтому вы не можете получить к ней доступ извне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...