Невозможно запустить функцию объекта - PullRequest
1 голос
/ 28 июня 2019

Я пытаюсь запустить функцию объекта, созданного с помощью функции конструктора.Тем не менее, я не могу сделать это, так как я получаю сообщение об ошибке: «TypeError: mutant_cat.meow не является функцией.(В 'mutant_cat.meow ()' 'mutant_cat.meow' не определено) ».Это моя функция конструктора:

function Cat(legs, sound) {
    this.legs = legs;
    this.sound = sound;
    var meow = function() {
        document.write(sound);
    }
}

И здесь я создаю объект и пытаюсь запустить его функцию:

var mutant_cat = new Cat(5, "eeeeeee");
mutant_cat.meow();

Любая помощь очень ценится.

Ответы [ 2 ]

2 голосов
/ 28 июня 2019

Лучше определить ваш метод на прототипе вне конструктора. Таким образом, нам не нужно определять функцию для каждого экземпляра Cat:

function Cat(legs, sound) {
  this.legs = legs;
  this.sound = sound;
}

//Add the method to the protoype instead of constructor
Cat.prototype.meow = function() {
  console.log(this.sound);
}

var mutant_cat = new Cat(5, "eeeeeee");
mutant_cat.meow();
2 голосов
/ 28 июня 2019

Это должно это исправить. Вам нужно, чтобы функция была свойством объекта, используя "this".

function Cat(legs, sound) {
    this.legs = legs;
    this.sound = sound;
    this.meow = () => {
        document.write(this.sound);
    }
}

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

Подробнее о функциях прототипа можно прочитать здесь: https://www.w3schools.com/js/js_object_prototypes.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...