Ошибка типа Javascript: не удается прочитать свойство ‘species’ неопределенного типа

#javascript

#javascript

Вопрос:

Я изучаю Javascript в Codecademy, и я выполняю задачу, в которой я должен зарегистрировать вид (Homo sapiens) и возраст двух человек. Оно возвращает ошибку типа TypeError, тип ошибки, который я еще не видел. Ошибка заключается в:

 TypeError: Cannot read property 'species' of undefined
  

Мой код:

 function Person(name,age) {
  this.name = name;
  this.age = age;
  this.species = "Homo Sapiens";
}

var sally = Person("Sally Bowles",39);
var holden = Person("Holden Caulfield",16);
console.log("sally's species is "   sally.species   " and she is "   sally.age);
console.log("holden's species is "   holden.species   " and he is "   holden.age);
  

Любая помощь или совет приветствуются

Ответ №1:

Вы должны использовать new оператор для создания экземпляра типа объекта:

 var sally = new Person('Sally Bowles', 39);
var holden = new Person('Holden Caulfield', 16);

console.log( sally.species, holden.species );  // "Homo Sapiens"
  

Ответ №2:

Вам не хватает new ключевого слова, как указано VisioN. Что происходит, когда вы не указываете new :

Попробуйте войти this внутрь Person .

 function Person(name,age) {
  this.name = name;
  this.age = age;
  this.species = "Homo Sapiens";
  console.log(this);
}
  

var sally = Person(«Салли Боулз»,39);

var holden = новый человек («Холден Колфилд», 16);

//Журналы:

Window {top: Окно, window: Окно, location: Местоположение, external: объект, chrome: объект…} Человек {имя: «Холден Колфилд», возраст: 16, вид: «Homo Sapiens»}

В первом вызове для Sally Bowles new не указано, поэтому Person вызывается как обычная функция JavaScript и, следовательно, this имеет значение window .

Принимая во внимание, что во втором вызове для Holden Caulfield new указано, поэтому Person вызывается как constructor функция и, следовательно this , устанавливается на ваш новый объект.