1

我在这里很好地混淆了自己。我的情况如下。

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

4 回答 4

3

我发现Douglas Crockford 的 Javascript是对 JavaScript 的最佳介绍。尤其是雅虎的视频,例如: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();

但正如其他人注意到的那样,您可以重构一些东西:)。

于 2009-05-12T19:31:30.897 回答
0

在我看来,您应该重构该代码以使其更简单。

我认为您的问题来自嵌套函数是私有的,因此您无法从外部访问它。

于 2009-05-12T19:00:04.333 回答
0

Dragger 的实例是您的 DesignPad 对象的“属性”吗?如果是这样,您可以将对该对象的引用传递给您的 removeHandler() 方法。

于 2009-05-12T19:04:37.680 回答
0

试试这个:

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');
于 2009-05-12T19:37:39.797 回答