2016-11-15 8 views
0

私はオブジェクト内のループ内に作成したいくつかのメソッドを登録しようとして問題があります。jquery/javascriptにループを使用してメソッドを作成する方法

何私がいることはこれです:

var scriptList = { 
    components : [ 
     'all' 
    ], 
    modules : [ 
     'one', 
     'two', 
     'three' 
    ] 
} 

function interface() { 
    var scope = this; 

    jQuery.each(scriptList, function(key, value) { 
     jQuery.each(value, function (index, name) { 
      var hookValue = 'hook_'+name; 

      scope.name = function(){ 
       window[hookValue] = jQuery('.js-'+name); 
       loadAndUse(window[hookValue],key+'/'+name); 
      } 

      if(key === 'modules'){ 
       scope.name(); 
      } 
     }); 
    }); 
} 

var ui = new interface(); 

それが動作し、その仕事をするが、私は、私は、このようにループを使用して作成したすべての方法に到達することができるようにしたいです:console.log(ui.one());

そして、私はこれを行う場合ので、私はそのような何かを行うにはありませんか:

function interface() { 
    var scope = this; 

    scope.one = function(){ console.log('one'); } 
    scope.two = function(){ console.log('two'); } 
    scope.three = function(){ console.log('three'); } 
} 

を、私は何の問題もなくconsole.log(ui.one());を介してアクセスすることができます...

私には何が欠けていますか?メソッドを反復するときにメソッドを登録する際にわからない方法がありますか?

+0

'interface'は将来の予約されたキーワードであり、関数名として使用することはお勧めしません。 – ASDFGerte

+0

ヒントありがとう!私は "インターフェイス"を "コア"に切り替えました – user2026121

答えて

3

scope.nameは、プロパティをscopeといいます。文字列値に基づいてプロパティにアクセスする場合は、角括弧の表記法を使用する必要があります。

scope[name] = function(){ 
    window[hookValue] = jQuery('.js-'+name); 
    loadAndUse(window[hookValue],key+'/'+name); 
} 
+0

パーフェクト!私は 'scope.name'を' scope [name] 'と' scope.name(); 'を' scope [name](); 'に変更しました。 – user2026121

関連する問題