Справка по объектно-ориентированному JavaScript - PullRequest
2 голосов
/ 09 июля 2010

У меня есть следующий код:

var HD = function() { };

HD.Car = (function() {
    var _date = "09/07/2010";
    return {
        Make: undefined,
        Model: undefined,
        showMakeAndModel: function() {
            document.write(this.Make + " " + 
                           this.Model + 
                           " (data correct as of " + _date + ")");
            }
        };
    })();

var bert = new HD.Car();
bert.Make = "Ford";
bert.Model = "Capri";
window.onload = bert.showMakeAndModel();

И получаю следующую ошибку:

HD. Автомобиль не является конструктором

ВсеЯ пытаюсь сделать это - протестировать (выучить) «шаблон синглтона» с замыканием (для частных пользователей), поэтому это не «реальный» пример, но книга, которую я читаю, предполагает, что это способ сделать это.

Так что немного запутался - любая помощь будет высоко ценится .. Роб

Ответы [ 5 ]

3 голосов
/ 09 июля 2010

У вас есть некоторые некорректные () () в определении класса HD.Car. Этот фиксированный пример работает:

var HD = function() { }; 

HD.Car = function() { 
    var _date = "09/07/2010"; 
    return { 
        Make: undefined, 
        Model: undefined, 
        showMakeAndModel: function() { 
            document.write(this.Make + " " +  
                           this.Model +  
                           " (data correct as of " + _date + ")"); 
            } 
        }; 
    }; 

var bert = new HD.Car(); 
bert.Make = "Ford"; 
bert.Model = "Capri"; 
window.onload = bert.showMakeAndModel();
1 голос
/ 09 июля 2010

Для получения дополнительной информации:

Как написать одноэлементный класс в javascript .

Надеюсь, это прольет на вас немного больше света!

0 голосов
/ 09 июля 2010

Ваша ошибка происходит из-за того, что вы выполняете функцию конструктора, на что указывают открывающая и закрывающая скобки после объявления HD.Car (и непосредственно перед var bert). Итак, функция выполняет и возвращает объект, который вы затем пытаетесь использовать с оператором «new».

Если вы удалите эти скобки, я думаю, вы получите ту функциональность, которая вам нужна.

0 голосов
/ 09 июля 2010

В JavaScript вы можете использовать только ключевое слово new с функциями .

HD.Car не функция, это объект.

Только не используйте new для вашего примера.

0 голосов
/ 09 июля 2010

Удалить new, потому что это необходимо только для функций конструктора. Теперь HD.Car будет объектом , который анонимная и самореализуемая функция возвращает Затем удалите символы после HD.Car. Так должно выглядеть:

var bert = HD.Car;

Теперь HD.Car это singleton.

Если вы хотите, чтобы он был больше похож на factory, вы должны сделать:

HD.Car = function() {
    var _date = "09/07/2010";
    return {
        Make: undefined,
        Model: undefined,
        showMakeAndModel: function() {
            document.write(this.Make + " " + 
                           this.Model + 
                           " (data correct as of " + _date + ")");
        }
   };
};​

var bert = new HD.Car();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...