老师实例属性这里不明白

来源:3-4 项目作业

WYW265672

2022-05-23 22:10:11

        class People2 {
            // 实例属性
            name='GG';
            age=18;
            // 实例方法:不共享
            sleep=function() {
                console.log(`💤`);
            }

            // 需要传参的属性
            constructor(sex,age) {
                this.sex=sex;
                this.age = age;
            }
            // class 的方法要写在construtor外面,生成共享的方法
            speak() {
                console.log(`${this.name}说话了`);
            }
        }
        const zs=new People2('female',1);
        // 只有constructor里面没写的属性,在constructor上面写才有用,不然就用constructor里面定义的属性值,没传参就是undefined也不用上面写的值
        console.log(zs.sex,zs.age, zs.name);  // female undefined GG
        zs.sleep();  // 💤
        const ls=new People2('male',2);
        console.log(ls.sleep===zs.sleep);  // false 不共享的方法,不好
        console.log(ls.speak===zs.speak);   // true 共享的


1、constructor外层的实例属性的意义是什么?说是默认值可是一但constructor里面规定了同名的属性,那外层实例属性就不管用了啊,不传参就是undefined,要这个外层实例属性干嘛

2、sleep 和speak方法一个有等号一个没等号,sleep这样写就不共享了,实际应用中是不是根本不会这样写的 

写回答

1回答

好帮手慕慕子

2022-05-24

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

1、constructor外层的实例属性的意义主要是设置实例属性的默认值,该值是固定的。一般不会设置与constructor中的属性同名,如果同名了,完全可以不用设置外层的实例属性,直接通过传参来设置属性值即可。

2、实际应用中确实很少会这样写,但是不排除会遇到有这种特殊需求的情况,掌握两者的区别,实际开发中,要是真的遇到了,灵活应用所学知识就可以。

祝学习愉快~

0

0 学习 · 17877 问题

查看课程