Мне нужны данные в классе - как я могу получить эти данные, не создавая новый класс? - PullRequest
0 голосов
/ 14 марта 2012

Допустим, у меня есть такой класс.

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

}

});

На самом деле, класс довольно большой, с множеством методов. Я ТОЛЬКО хочу получить доступ к данным в хэше «foodtype». Есть ли способ, которым я могу пойти и получить это, не создавая новый класс и читая таким образом .. ala

var newSomething = new foodData;
    newSomething.foodType;

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Да, ваш доступ должен выглядеть следующим образом:

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

Вам просто нужен конструктор с именем 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(){

    }
});

Таким образом, вы можете помешать кому-либо изменить его.(Несмотря на то, что вы должны вернуть CLONE из foodType, но это должно получить точку зрения конечного пользователя).

Если у вас возникают проблемы с памятью из-за размера данных в 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 голосов
/ 14 марта 2012

Если вы хотите получить доступ только к fooType и не хотите создавать экземпляры класса.Затем избавьтесь от Class.create () все вместе и просто создайте POJO (Простой старый 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

0 голосов
/ 14 марта 2012

Не уверен, что я вас понял, но

       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());

Я на самом деле не большой поклонник эмуляторов Class / OO в Mootools и jQuery, нативный JS более интересен в этом отношении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...