class中实例方法

class中实例方法

       class Person{

            name="wzk";

            age =18;//设置实例的默认属性

            sex = 'male';

            //方法就是值为函数的特殊属性

//定义方法的三种形式1

            getSex = function(){

                return this.sex;

            } 

//定义方法的三种形式2

    ​    ​    ​getName=()=>{

                return this.name;

            }

//定义方法的三种形式3

            getAge(){

                return this.age;

            }

            constructor(age,name){

                this.age=age||this.age;//必须这样写

                this.name=name||this.name//实例属性

            }

        }

        const p1 = new Person();

        const p2 = new Person()

        console.log(p1.getSex===p2.getSex);//false

    ​    ​console.log(p1.getName===p2.getName);//false

        console.log(p1.getAge===p2.getAge);//true

同样是实例的方法为什么一个是false,一个是true;是不是在类中建议用

            getAge(){

                return this.age;

            }

这种形式定义实例的方法,其他方式会占内存


正在回答 回答被采纳积分+1

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

1回答
好帮手慕夭夭 2021-01-07 17:25:46

同学你好,问题解答如下:

1、前两种方式定义的方法,是和前面属性(name、age、sex)定义方式一样,它是实例上的属性。实例属性在类实例化的时候,相当于复制一份给实例对象。所以两个实例对象上的属性和方法虽然一样,但是不是同一份数据,所以比较时不相等。


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

2、而最后一种方式定义的方法,是类原型上的方法。当实例化的时候,实例化对象的原型会指向类的原型,即原型的数据是共享的。两个实例对象上的getAge指向的都是类原型上的getAge,所以比较时是相等的。

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

3、是的,前两种方式占用内存。定义方法时,建议在类的原型上定义(即使用上图第三种方法)。因为方法都是共用的,放在原型上更节约内存。

祝学习愉快~

  • 老师,我发现视频5分25开始和后面几分钟之内视频老师讲的好像有错误,他一直在说那个speak(){this.name=18}是实例的方法,那个不是应该是Person类原型上的方法吗?(Person.protype上的),而且我也写了下代码,new出的实例上并没有speak方法,而确实是在Person.protype上才有speak方法,实例只是能通过原型链查找调用speak方法吧?实例本身并没有这个方法

    搜索

    复制

    2022-04-10 18:29:47
  • 同学你好,感谢同学的反馈,我们会进行审核,如果有误将及时进行更正。祝学习愉快!

    2022-04-10 18:49:14
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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