2012-03-14 11 views
0

私はそういうクラスがあると言うことができます。クラスにデータが必要です - 新しいクラスを作成せずにデータを取得するにはどうすればよいですか?

var foodData = Class.create({ 
initialize: function() { 
    this.foodType = { 
     "grains" : { 
      "item1" : "20", 
      "item2" : "60"     
     },    
     "liquod" : { 
      "item1" : "30", 
      "item2" : "90"     
     }, 
_someMethod: function(){ 

} 

}); 

実際には、クラスはメソッドがかなり大きくなります。私は、ハッシュの "foodtype"内のデータにアクセスしたいだけです。あなただけの必要

var newSomething = new foodData(); 
newSomething.foodType; 

:私はええ、あなたのアクセスは次のようになりますで行くと

var newSomething = new foodData; 
    newSomething.foodType; 

答えて

3

たala ...新しいクラスを作成し、そのように読まずにそれを得ることができる方法はあります呼び出されたコンストラクタはallです。

しかし、このように、それのためにゲッターを作成する方が良いでしょう:

var foodData = Class.create({ 
    initialize: function() { 
    var foodType = { 
     "grains" : { 
      "item1" : "20", 
      "item2" : "60"     
     },    
     "liquod" : { 
      "item1" : "30", 
      "item2" : "90"     
     } 
    }; 

    this.getFoodType = function() { 
     return foodType; 
    }; 
    }, 
    _someMethod: function(){ 

    } 
}); 

あなたがそれを変更されるのを防ぐことができますこの方法。 (あなたはfoodTypeのCLONEを返さなければなりませんが、これはエンドユーザ全体にポイントを取得するはずです)。

foodTypeのデータのサイズのためにメモリの問題がある場合は、静的変数foodTypeを作成するこのメソッドを試すことができます。

var FoodData = (function() { 
    var foodType = { 
     "grains" : { 
      "item1" : "20", 
      "item2" : "60"     
     },    
     "liquod" : { 
      "item1" : "30", 
      "item2" : "90" 
     } 
    }; 

    return new Class.create({ 
     initialize : function() { 
     }, 
     getFoodType : function() { 
      return foodType; 
     }, 
     _doSomething : function() { 
     } 
    }); 
})(); 

作成するFoodDataクラスをいくつ作成しても、それぞれ同じデータを共有します。

var newSomething = new FoodData(); 
var anotherSomething = new FoodData(); 

newSomething.getFoodType()がまだある)anotherSomething.getFoodType()

newSomething.doSomethingToData(); 

newSomething.getFoodType(同じanotherSomething.getFoodType()

+0

私はそれを行うことでしたが、私は新しいを宣言することによって、考え私は効果的にメモリサイズを大幅に増やしています。私はありませんか? –

+0

クラスのインスタンスを作成しています。メモリの問題のために複数回インスタンス化したくない場合は、代わりにシングルトンを作成する必要があります。現在のメソッドでは、それぞれ異なるデータを持つ複数のfoodDataオブジェクトを内部に持つことができます。 – CrazyBS

+0

インスタンス化する任意のクラスのデータのコピーを1つだけ持つ別の方法がありますが、その方法も概説できます。 – CrazyBS

0

わからない私と同じですあなたを理解しましたが、

 var foodData = function() { 
      var foodType = {//also private 
       "grains" : { 
        "item1" : "20", 
        "item2" : "60"     
       },    
       "liquod" : { 
        "item1" : "30", 
        "item2" : "90"     
       }; 
     var someMethod = function(){}//private 
     return foodType; 

     } 

alert(foodData()); 

私はMootoolsのClass/OOエミュレータのファンではありません。 jQuery、ネイティブJSはこの点でもっと楽しいです。

+0

ありがとうございます。感謝します。 –

0

fooTypeにのみアクセスし、そのクラスのインスタンスを作成しない場合は、次に、Class.create()を一度に取り除き、その中に関数を持つPOJO(Plain old javaオブジェクト)を作成します。

var FoodData = { 
    fooType : { 
     "foobar" : { 
      "foo" : "10", 
      "bar" : "20" 
     }, 
     "barfoo" : { 
      "bar" : "30", 
      "foo" : "40" 
     } 
    }, 
    doSomething : function() { 
     // Lots of something to do 
    } 
}; 

次に、あなたが使用することができます。

var something = FoodData; 
something.fooType; 

をしかし、あなたが行うすべてはfooTypeするか何か、同様FoodDataオブジェクトに影響します

関連する問題