2009-10-10 4 views
2

У меня есть класс JavaScript, представляющие собой автомобиль, который построен с использованием двух параметров, которые представляют марку и модель автомобиля:JavaScript типов параметров конструктора

function Car(make, model) { 
    this.getMake = function() { return make; } 
    this.getModel = function() { return model; } 
} 

Есть ли способ, чтобы проверить, что марка и модель, поставляемая конструктору, - это строки? Например, я хочу, чтобы пользователь мог сказать,

myCar = new Car("Honda", "Civic"); 

Но я не хочу, чтобы пользователь мог сказать,

myCar = new Car(4, 5.5); 
+0

Не забудьте объявить ваши переменные. – kangax

ответ

4
function Car(make, model) { 
    if (typeof make !== 'string' || typeof model !== 'string') { 
     throw new Error('Strings expected... blah'); 
    } 
    this.getMake = function() { return make; }; 
    this.getModel = function() { return model; }; 
} 

Или просто конвертировать все, что вы получите его строковое представление:

function Car(make, model) { 
    make = String(make); 
    model = String(model); 
    this.getMake = function() { return make; }; 
    this.getModel = function() { return model; }; 
} 
+1

Как правило, лучше использовать 'String ()' вместо ' .toString()', так как нет никакой гарантии, что объект имеет 'toString' и что его' toString' является вызываемым. Я также предлагаю прекратить функциональные выражения с точкой с запятой - чтобы избежать любого неприятного поведения. – kangax

+0

@kangax, отредактированный в соответствии с вашими рекомендациями. – James

Смежные вопросы