Структуры данных Javascript - PullRequest
       19

Структуры данных Javascript

0 голосов
/ 03 декабря 2009

Я хотел бы знать, возможно ли сделать что-то вроде этого:

if (mb == null || typeof (mb) != "object") {
    var mb = new Object();
}


mb = {
    tests: {
        onAnimals: {
            test: function() {
                return "";
            }
        }
        onHumans: {
            test: function() {
                return "";
            }
        }
    }
}

Но когда я пытаюсь это сделать, я вижу тесты, но когда я ухожу дальше, я не вижу seAnimals / onHumans.

JavaScript для меня все еще нов, поэтому надеюсь, что вы поможете.

Ответы [ 5 ]

7 голосов
/ 03 декабря 2009

Ты пропустил запятую перед человеком. Я предположил, что mb является глобальной переменной; Вы можете использовать вместо этого var, если это то, что вам нужно. Кроме того, легче читать, если вы структурируете его по-другому, например:

window.mb = window.mb || {};
window.mb = {
  tests: {
    onAnimals: {
      test: function(){
        return "";
      }
    },
    onHumans: {
      test: function(){
        return "";
      }
    }
  }
};
2 голосов
/ 03 декабря 2009

Вы пропустили запятую до onHumans

if (mb == null || typeof (mb) != "object") {
    var mb = new Object();
}

mb = {
    tests: {
        onAnimals: {
            test: function() {
                return "animal";
            }
        },
        onHumans: {
            test: function() {
                return "human";
            }
        }
    }
}

alert(mb); //[object Object]
alert(mb.tests); //[object Object]
alert(mb.tests.onAnimals); //[object Object]
alert(mb.tests.onHumans); //[object Object]
alert(mb.tests.onAnimals.test()); //animal
alert(mb.tests.onHumans.test()); //human
1 голос
/ 23 сентября 2010

Как указано в некоторых комментариях выше, проверка на наличие переменной mb является избыточной, когда вы просто повторно объявляете ее для добавления своих методов и свойств.

Если вы проверяете наличие переменной для добавления дополнительных методов к объекту, вы должны использовать такой метод, как расширение jQuery или метод применения ExtJ.

JQuery:

window.mb = $.extend(window.mb||{}, {
    tests: {
        onAnimals: {
            test: function() {
                return "";
            }
        },
        onHumans: {
            test: function() {
                return "";
        }
    }
});

Ext:

window.mb = Ext.apply(window.mb||{}, {
    tests: {
        onAnimals: {
            test: function() {
                return "";
            }
        },
        onHumans: {
            test: function() {
                return "";
        }
    }
});

Этот фрагмент кода либо добавит тестовый объект к существующей переменной mb, либо создаст переменную mb, а затем добавит к ней тестовый объект.

1 голос
/ 03 декабря 2009

Вам не нужно заранее объявлять переменную как объект, просто используйте скобки, как это все, что вам нужно. У вас есть синтаксическая ошибка, пропущенная запятая перед "onHumans", но, кроме этого, она выглядит хорошо для меня. Вы должны быть в состоянии получить доступ к функциям через mb.tests.onAnimals.test и mb.tests.onHumans.test

1 голос
/ 03 декабря 2009

Ваш код в основном действителен, и вам даже не нужно выполнять первоначальную проверку if. Просто введите var mb = { ..., и вы начнете устанавливать mb для нового объекта, независимо от того, был ли он ранее, неопределенным или чем-то еще ...

Вам не хватает запятой после объявления onAnimals tho:

mb = {
    tests: {
        onAnimals: {
            test: function() {
                return "";
            }
        },
        onHumans: {
            test: function() {
                return "";
            }
        }
    }
}
...