Я создал класс person. Когда я инстанцирую его как экземпляр daffyDuck, он не распознается как экземпляр A_person. Почему?

var A_person = function(firstAndLast) {
  var splitName = firstAndLast.split(" ");
  return {
    getFullName: function(){
      return splitName.join(" ");
    } 
  };
};

var daffyDuck = new A_person('Daffy Duck');
daffyDuck instanceof A_person  // false (I expected this to be true!)

kilojoules

Ответов: 3

Ответы (3)

Вы можете удалить оператор return и использовать вместо него this, чтобы присоединить функцию к объектам.

var A_person = function(firstAndLast) {
  var splitName = firstAndLast.split(" ");
  this.getFullName = function(){
      return splitName.join(" ");
    } 
};

var daffyDuck = new A_person('Daffy Duck');
daffyDuck instanceof A_person  // true

Я думаю, вы собираетесь использовать прототип вместо конструктора (возвращающего объект)... что-то вроде этого

function A_Person(firstAndLast){
    this.splitName = firstAndLast.split(" ");
}
A_Person.prototype.getFullName = function(){
     return splitName.join(" ");
}

Для получения дополнительной информации смотрите здесь https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

.

Вы вообще не определяете класс. Вы просто создаете метод и сохраняете его в переменной.

Вам нужно фактически определить класс. Начиная с ES6 это очень просто - (узнайте больше здесь):

.
class A_person {
  constructor(firstAndLast) {
    var names = firstAndLast.split(" ");
    this.firstName = names[0];
    this.lastName = names[1];
  }
}

var daffyDuck = new A_person('Daffy Duck');

2022 WebDevInsider