2

これはばかげているでしょうが...私は一生、オブジェクトのすべてのメソッドを初期化する方法を理解できません。例えば

var obj = {
prop1: function() { ... },
prop2: function() { ... } //etc
}

obj.prop1() と obj.prop2() を呼び出さずにそれらを初期化する方法を理解できません。これは、10 個以上の関数を知っている場合は面倒です。私も次のようなものを見てきました、

var obj = new obj();

function obj() {
    this.init=function() { ... };
    this.init();
}

ただし、私が知る限り、それぞれを個別に初期化する必要があります。

4

2 に答える 2

1

1 つのオブジェクトに対して 10 個の異なるものを初期化する必要がある理由がよくわかりません。

これを行う 1 つの方法は、単一の init メソッドですべての呼び出しを非表示にすることですが、それでもそこから 10 個のメソッドすべてを実行する必要があります。

もう 1 つの方法は、すべての初期化メソッドに のような特別な名前を付けることです__initMyCustomInit。その後、オブジェクトのすべてのプロパティをループし__initて、正規表現を使用して一致させることができます^__init.*$

for (var prop in obj) {
  if (obj.hasOwnProperty(prop) && prop.match(/^__init.*$/)) {
    obj[prop]();
  }
}
于 2013-10-20T09:35:36.200 に答える
0

あなたが何を望んでいるかを完全に理解しているかどうかはわかりませんが、これはうまくいく可能性があります:

var obj = {

prop1: function() { return true; },
prop2: function() { return false; }

}
//init
for(var r in obj){
      obj[r](); // call!
}

または、obj の一部として:

var obj = {
  prop1: function() { return true; },
  prop2: function() { return false; },
  init: function() {
     for(var r in this){
         //prevent calling your self...
         if (r!=='init'){
           this[r]();
         }
     } 
  }   
}

obj.init();
于 2013-10-20T09:34:09.213 に答える