2013-05-28 4 views
3

Вот мой объект строительства,Как определить дополнительные параметры в Java Script

function Employee(name, dob) { 
     this.Name = name; 
     this.DateOfBirth = new Date(dob); 
    } 

Теперь, я создал экземпляр для этого, как

var emp = new Employee("sample","12/12/12"); 

Its работает нормально, когда я напечатать выход ,

Но, если я создаю объект как

var emp = new Employee(name = "sample"); 

или

var emp = new Employee(dob = "12/12/12"); 

его не работает нормально. В обоих случаях поле DateOfBirth недействительно.

Мне нужно определить объект с дополнительными параметрами.

+1

Вы можете передать, а затем прочитать объект конструктору; 'new Employee ({name:" bob ", age: 40});' –

ответ

6

JavaScript не поддерживает именованные необязательные параметры.

Когда вы var emp = new Employee(name = "sample");

Вы объявить глобальную переменную name, назначая sample к нему и передавая что к new вызова.

Вы можете использовать объекты для выполнения похожего синтаксиса в JS:

var emp = new Employee({name:"sample"}); 

Если функция Сотрудник становится:

function Employee(options) { 
     this.Name = options.name; 
     if(options.dob !== undefined){ 
      this.DateOfBirth = new Date(options.dob); 
     } 
} 

Стоит отметить, на практике часто не нужен класс Employee , а может просто сделать:

var emp = {name:"sample"}; 

Или:

var emp = {dob:new Date("12/12/12");} 

Поэтому, если Сотрудник не станет настоящей моделью (и имеет больше, чем просто два поля), я думаю, что вы можете подумать об этом.

-1

Как хорошая практика, вы никогда не должны игнорировать переменные. Вы можете явно позвонить var emp = new Employee(null, "12/12/12");

Таким образом, все инициализируется, и вы не будете иметь головную боль позже. Существует также что-то вроде этого, но вам действительно нужно проверить значения перед назначением.

function Employee() { 
     this.Name = name; 
     this.DateOfBirth = new Date(dob); 
    } 

var emp = new Employee(name = null,dob = "12/12/12"); 
+0

** Вы определяете здесь два глобала! ** Вы создаете глобальное глобальное имя и глобальное значение 'dob'. Также OP требовал четкого синтаксиса. Кроме того, в JavaScript значение null и undefined не означает _ то же самое. –

+0

yep ... ты прав. Извини за это. Я просто хочу понять, как фактически работают переменные в js – adi

1
function Employee(params) { 
    if (typeof params != "undefined") { 
     this.Name = (typeof params.name != "undefined") ? params.name : ""; 
     this.DateOfBirth = (typeof params.dob != "undefined") ? new Date(params.dob) : null; 
    } 
} 

new Employee({ 
    name: "John", 
    dob: "12/12/12" 
}); 
new Employee({ 
    name: "John" 
}); 
new Employee({ 
    dob: "12/12/12" 
}); 

или используя простые операторы, использующие ||.

function Employee(params) { 
    params = params || {}; 
    this.Name = params.name || ""; 
    this.DateOfBirth = new Date(params.dob || ""); 
} 
+0

'typeof' - это оператор, а не функция. Пожалуйста, рассмотрите 'typeof name! ==" undefined "'. Кроме того, я думаю, что существует большая разница между установкой значений по умолчанию (например, пустой строкой в ​​вашем случае) и сохранением значений 'undefined'. Последнее, ваш первый пример не работает (вы устанавливаете значение «null», но проверяете «undefined», которые совершенно разные), пожалуйста, подумайте над тем, чтобы пересмотреть эти вещи. –

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