2017-01-26 8 views
0

2つのJavascriptファイルがあります(AB)。JScriptオブジェクトAを使用してオブジェクトBの機能が表示されない

もう1つに含まれています - BAのオブジェクトを使用します。私debug機能で

最初私はAConfigオブジェクト、 を作成し、その後、私はABuilderAConfigオブジェクトを使用していますBElementBuilderを作成します。

現時点ではすべて問題ありません。

しかし、私はbElement.getBStringを呼び出し、それがエラーでme.aBuilder.getAString(Aconfig);に内側になり、失敗したときに、

オブジェクトはこのプロパティまたはメソッドこの問題が発生しているのはなぜ

をサポートしていませんか?

ここA

var AConfig = (function() { 
    function AConfig(name, flag){ 
     this.name = (name) ? name : -1; 
     this.flag = (flag) ? true : false; 

     return this; 
    } 

    return AConfig;  
})(); 

var ABuilder = (function() { 
    function ABuilder(config){ 
     this.config = (config) ? config : new AConfig(); 

     return this; 
    }; 

    ABuilder.prototype = { 
     getAString: function(configObj){ 
      var me = this, 
       config = (configObj) ? configObj : me.config, 
       name = me.name, 
       flag = me.flag; 

      return 'A name is' + name + 'flag =' + flag; 
     } 
    } 

    return ABuilder; 
}); 

はここBだだ:

!INC aFile.A 

    var BElementBuilder = (function() { 
     function BElementBuilder(aConfig, bName){ 
      this.aConfig = (aConfig) ? aConfig : new AConfig(); 
      this.bName = (bName) ? bName : "B"; 
      this.aBuilder = new ABuilder(); 

      return this; 
     }; 

     BElementBuilder.prototype = { 
      getBString: function(configObj){ 
       var me = this, 
        Aconfig = (configObj) ? configObj : me.aConfig, 
        name = me.bName; 
       //and here it fails 
       Aconfig = me.aBuilder.getAString(Aconfig); 

       return 'B has config of' + Aconfig; 
      } 
     } 

     return BElementBuilder; 
    })(); 

    function debug(){ 
     var aConfig = new AConfig("AAA", true); 
     var bElement = new BElementBuilder(aConfig); 

     var t = bElement.getBString(aConfig); 
    }; 

    debug(); 

P.S. 違いがある場合はJScriptです

答えて

2

ABuilderモジュールでIIFE呼び出しを忘れた場合。そうすれば、ABuilderはクラスコンストラクタではなく、新しいコンストラクタ関数を返すモジュールファクトリ関数です。 new ABuilder();と呼び出すと、期待したisntanceの代わりにbElement.aBuilderに代入されるコンストラクタ関数が返されます。

+0

ああ、ありがとう!本当にばかげたミス、どうして私はそれを逃したのですか – DanilGholtsman

+0

私は最初にそれを逃しましたが、私のデバッガが例外を確認して 'this.aBuilder'の値を示したとき、私はそれをどこかにトラッキングする必要がありました:-) – Bergi

+0

問題は私のような実際の世界のコード例があるが、IIFEは役に立たない、うーん – DanilGholtsman

関連する問題