类中this方法声明问题

类中this方法声明问题

在class类中,constructor构造函数声明的this方法和直接在类中声明的方法有什么不同,如下:

this.translate = function(){ },    translate(){}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,两者不同之处是:

在constructor中使用this声明的方法是挂载到实例对象上,直接在类中声明的方法是挂载到类的原型对象的

老师这里给同学举个简单的示例,帮助同学更好的理解

  1. 我们先通过代码实现的效果, 查看两种方式声明的方法添加到了哪个对象上

    http://img1.sycdn.imooc.com//climg/5daa782a09cdc97d11770816.jpg

    打印结果, 可以看出run是实例对象上的方法, transport是原型对象的方法

    http://img1.sycdn.imooc.com//climg/5daa783f0984ba2605790316.jpg

  2. 然后, 我们在来测试, 如何访问这两种方式声明的方法, 可以直接通过实例对象.方法的方式访问

    http://img1.sycdn.imooc.com//climg/5daa792a092d150011850875.jpg

    打印结果, 可以看出实例对象可以访问自己的方法, 也可以通过原型链访问到原型对象的方法

    http://img1.sycdn.imooc.com//climg/5daa795a092bdbac02550134.jpg

  3. 继续测试, 当constructor中存在同名的方法,实例对象访问的是自己本身上的方法

    http://img1.sycdn.imooc.com//climg/5daa79e909d8fecc10030871.jpg

    打印结果

    http://img1.sycdn.imooc.com//climg/5daa79f509b407ba04270133.jpg

  4. 最后, 我们再来分析为什么会有这两种声明方式呢

    (1)因为在constructor中通过this的方式声明的方法,是挂载到实例对象上的, 一般描述每一个实例化对象特有动作的时候,可以将该方法挂载到实例对象上。

    (2)直接在类中声明方法是添加到类的原型对象上,实例化对象也可以通过原型链访问这个方法, 所以一般是所有实例化对象共用一个方法的时候,使用这方式声明

  5. 老师这里给同学举一个简单的使用场景, 例如有一个Person类, 他们都有一个共同的方法, 就是走路, 那么就可以直接在类中定义一个walk方法,然后每一个人吃的饭可能是不同的, 那么就可以在constructor中定义方法eat,添加到每个实例对象上

    http://img1.sycdn.imooc.com//climg/5daa837d09f3d43f08920618.jpg

    http://img1.sycdn.imooc.com//climg/5daa837909b62a0d02750126.jpg

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

 




  • 非常感谢,逻辑清楚,通俗易懂。这个类的声明方法就是以前构造+原型的声明对象方式,如function Car(){ },this声明的属性和方法,只能实例化对象后,被对象调用,而构造函数prototype原型的方法声明在函数外部。在ES6中把他们整合到了一个对象Car中,construct()替代构造函数,简写方法替代原型方法写法,对吗?
    2019-10-19 22:42:12
  • 可以这么理解~
    2019-10-20 10:26:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师