无法运行对象的功能

时间:2019-06-28 17:28:54

标签: javascript function object

我正在尝试运行使用构造函数创建的对象的函数。但是,我无法这样做,因为我不断收到错误提示“ 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 个答案:

答案 0 :(得分:2)

这应该解决它。您需要使用“ this”将该函数作为对象的属性。

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

如果您希望所有Cat都可以喵叫,那么最好使用原型函数,因为这是内存优化的,并且所有Cat实例之间都具有共享函数,而不是每个Cat都有自己的重复喵函数。

您可以在此处了解有关原型功能的更多信息:https://www.w3schools.com/js/js_object_prototypes.asp

答案 1 :(得分:2)

在构造函数之外的原型上定义方法是一种更好的做法。这样,我们不必为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();