【JavaScript】19_面向对象——封装

举报
魔天伦 发表于 2023/02/23 13:05:15 2023/02/23
【摘要】 6、封装面向对象的特点:封装、继承和多态1.封装对象就是一个用来存储不同属性的容器对象不仅存储属性,还要负责数据的安全直接添加到对象中的属性,并不安全,因为它们可以被任意的修改如何确保数据的安全:  1.私有化数据- 将需要保护的数据设置为私有,只能在类内部使用    2.提供setter和getter方法来开放对数据的操作  - 属性设置私有,通过getter setter方法操作属性带...

6、封装

面向对象的特点:
封装、继承和多态

1.封装

  • 对象就是一个用来存储不同属性的容器

  • 对象不仅存储属性,还要负责数据的安全

  • 直接添加到对象中的属性,并不安全,因为它们可以被任意的修改

  • 如何确保数据的安全:
      1.私有化数据

- 将需要保护的数据设置为私有,只能在类内部使用
    2.提供setter和getter方法来开放对数据的操作
  - 属性设置私有,通过getter setter方法操作属性带来的好处
    1. 可以控制属性的读写权限
    2. 可以在方法中对属性的值进行验证

  • 封装主要用来保证数据的安全

  • 实现封装的方式:
      1.属性私有化 加#
      2.通过getter和setter方法来操作属性
          get 属性名(){
              return this.#属性
          }

​    set 属性名(参数){
  ​        this.#属性 = 参数
  ​    }

    <script>
        class Person {
            #address = '花果山'// 实例使用#开头就变成了私有属性,私有属性只能在类内部访问

            #name
            #age
            #gender

            constructor(name,age,gender){
                this.#name = name
                this.#age = age
                this.#gender = gender
            }

            sayHello(){
                console.log(this.#name)
            }

            //getter方法,用来读取属性
            getName(){
                return this.#name
            }
            // setter方法,用来设置属性
            setName(){
                this.#name = name
            }

            getAge(){
                    return this.#age
                }

            setAge(age){
                if(age >= 0){
                    this.#age = age
                }
            }

            get gender(){
                return this.#gender
            }

            set gender(gender){
                this.#gender = gender
            }
        }

        const p1 = new Person("孙悟空", 18, "男")
        // p1.age = "hello"

        // p1.getName()
        p1.setAge(-11) // p1.age = 11  p1.age
        // p1.setName('猪八戒')
        p1.gender = "女"
        console.log(p1.gender)
    </script>
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。