使用_模拟私有属性和方法的问题

来源:3-5 私有属性和方法

qq_慕仰20210716

2022-06-25 16:08:45

      class Person {
        constructor(name) {
          this._name = name;
        }
        _speak() {
          console.log("speak");
        }
        getName() {
          return this.name;
        }
      }
      const p = new Person("Alex");
      //   我们在创建出p对象后,访问Person类的私有属性name失败。调用私有方法也不能了。
      //   console.log(p.name); //undefined
      //   p.speak(); //p.speak is not a function

      //   不能访问,那试一下能不能改变name值
      //   这里刚刚有一个疑问:我以为:使用_就不可访问私有属性和方法但可以改变。后来发现原来是这里新增加的一个name和age属性
      p.name = "ZS";
      p.age = 11;
      console.log(p.name); //ZS
      console.log(p.age);   //11

老师您好!在以上代码中,我这里的想法对不对

      //   这里刚刚有一个疑问:我以为:使用_就不可访问私有属性和方法但可以改变。后来发现原来是这里新增加的一个name和age属性


写回答

1回答

好帮手慕星星

2022-06-25

同学你好,理解没问题,是新增的属性

https://img.mukewang.com/climg/62b6c4d109a8048c04860119.jpg

私有属性一般是只读的,能获取但是不能修改。这种情况可以使用setter和getter

https://img.mukewang.com/climg/62b6c7a80913071205060421.jpg

结果是实例化的值

https://img.mukewang.com/climg/62b6c7c709dfa67e03430029.jpg

参考文档:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/set

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/get

了解下即可。祝学习愉快!

0

0 学习 · 17877 问题

查看课程