函数内的属性是函数,如何执行它

function animal(){

this.eat = function (){
    console.log('i will eat');
}

}
为什么不能用animal.eat()的方法去执行,而是用var一个实例,去执行。不理解其中原理
animal.eat(); //eat不是一个函数

阅读 1.9k
2 个回答

1.animal要运行一次才会执行函数体的内容

2.直接调用animal(),this在浏览器中指向window,在node中指向global

3.因此要向执行eat需要这么写:

animal()

// equal to window.eat() / global.eat()
eat()

4.var一个实例的方法是把animal当做构造器函数使用,new的过程中会执行函数体内容,并返回this,可以这么写:

// this指向cat
var cat = new animal()

cat.eat()

因为你这个this.eat的this 指向的是window,在非严格的模式下面。所以你animal.eat是报错的。你直接运行eat(),就可以了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题