Пространство имен Javascript, которое работает в IE / Firefox / Chrome - PullRequest
0 голосов
/ 28 марта 2011

Я пытаюсь создать пространство имен, которое инкапсулирует все наши классы javascript, однако я получаю отсутствует: после id свойства в ie9 и firefox в строке POI.prototype.getFullAddress (остановка после POI).Вторая проблема, когда я пытаюсь инициализировать объект var x = new Makani.POI (a, b, c ...) Я получаю ошибки JavaScript и должен использовать var x = Makani.POI (a, b, c ...) без нового ключевого слова, что странно.Я разместил полный код для справки.Спасибо за вашу помощь.

/* Makani Javascript Libraries */

var Makani = function () {

var private_var;

function private_method() {

    // do stuff here

}

return {

    POI: function(ID, Title, Section, District, City, Governorate) {
        this.ID = ID;
        this.Title = Title;
        this.Section = Section;
        this.City = City;
        this.Goverorate = Governorate;
    },

    POI.prototype.getFullAddress = function (opts) {

        if (("includeCity" in opts) && (opts["includeCity"] == false))
            return this.Section + ", " + this.District;
        else if (("includeGovernorate" in opts) && (opts["includeGovernorate"] == false))
            return this.Section + ", " + this.District + ", " + this.City; 
        else return this.Section + ", " + this.District + ", " + this.City + ", " + this.Governorate;
    }

};     
} ();

Ответы [ 2 ]

0 голосов
/ 28 марта 2011

Инициализатор объекта ( литерал объекта ) в JS выглядит следующим образом:

{
    propName: 123,
    123: 'some value',
    hmmAFunction: function(){}
}

Как правило, он идет PropertyName : AssignmentExpression с каждой парой ключ / значениечерез запятуюИтак, когда вы делаете это:

return {

    POI: function(ID, Title, Section, District, City, Governorate) {

    },

    // THIS
    POI.prototype.getFullAddress = function (opts) {

    }

};  

... это недопустимо и приведет к ошибкам.

Попробуйте вместо этого:

var Makani = {
    POI: (function(){

        function POI (ID, Title, Section, District, City, Governorate) {
            this.ID = ID;
            this.Title = Title;
            this.Section = Section;
            this.City = City;
            this.Goverorate = Governorate;
        }

        POI.prototype.getFullAddress = function (opts) {

            if (("includeCity" in opts) && (opts["includeCity"] == false))
                return this.Section + ", " + this.District;
            else if (("includeGovernorate" in opts) && (opts["includeGovernorate"] == false))
                return this.Section + ", " + this.District + ", " + this.City; 
            else return this.Section + ", " + this.District + ", " + this.City + ", " + this.Governorate;
        };

        return POI;

    }())
};

Кроме того, я не советую начинать имя переменной с заглавной буквы (например, District), за исключением случаев, когда она ссылается на функцию конструктора (например, POI).

0 голосов
/ 28 марта 2011

Вероятно, вы просто хотите это:

POI.getFullAddress: function (opts) {

Похоже, вы пытаетесь изменить прототип, но вы создаете определение объекта в этом конкретном блоке. Другой способ - создать деталь return как переменную, затем расширить прототип и вернуть его.

То, что вы делаете на простом уровне, таково:

x = {
  name1: value,
  name2 = value
}

неверный синтаксис.

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