类中this方法声明问题
在class类中,constructor构造函数声明的this方法和直接在类中声明的方法有什么不同,如下:
this.translate = function(){ }, translate(){}
正在回答
同学你好,两者不同之处是:
在constructor中使用this声明的方法是挂载到实例对象上,直接在类中声明的方法是挂载到类的原型对象的
老师这里给同学举个简单的示例,帮助同学更好的理解
我们先通过代码实现的效果, 查看两种方式声明的方法添加到了哪个对象上
打印结果, 可以看出run是实例对象上的方法, transport是原型对象的方法
然后, 我们在来测试, 如何访问这两种方式声明的方法, 可以直接通过实例对象.方法的方式访问
打印结果, 可以看出实例对象可以访问自己的方法, 也可以通过原型链访问到原型对象的方法
继续测试, 当constructor中存在同名的方法,实例对象访问的是自己本身上的方法
打印结果
最后, 我们再来分析为什么会有这两种声明方式呢
(1)因为在constructor中通过this的方式声明的方法,是挂载到实例对象上的, 一般描述每一个实例化对象特有动作的时候,可以将该方法挂载到实例对象上。
(2)直接在类中声明方法是添加到类的原型对象上,实例化对象也可以通过原型链访问这个方法, 所以一般是所有实例化对象共用一个方法的时候,使用这方式声明
老师这里给同学举一个简单的使用场景, 例如有一个Person类, 他们都有一个共同的方法, 就是走路, 那么就可以直接在类中定义一个walk方法,然后每一个人吃的饭可能是不同的, 那么就可以在constructor中定义方法eat,添加到每个实例对象上
如果帮助到了你, 欢迎采纳!
祝学习愉快~~~
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星