25_JavaScript之封装性

什么是封装?

封装性就是隐藏实现细节,仅对外公开接口

为什么要封装?

不封装的缺点:当一个类把自己的成员变量暴露给外部的时候,那么该类就失去对属性的管理权,别人可以任意的修改你的属性

    <script>
        function Person() {
            this.name = "Durant";
            this.age = 35;
            this.say = function() {
                console.log("Hello World");
            }
        }
        let obj1 = new Person();
        obj1.age = -3; //属性可以任意修改   及其不安全
        console.log(obj1.name);
        console.log(obj1.age);
        obj1.say();
    </script>

结论:默认情况下对象的属性和方法都是公开的, 只要拿到对象就可以操作对象的属性和方法

控制台输出:
在这里插入图片描述
封装就是将数据隐藏起来,只能用此类的方法才可以读取或者设置数据,不可被外部任意修改. 封装是面向对象设计本质(将变化隔离)。这样降低了数据被误用的可能 (提高安全性和灵活性)

    <script>
        function Person() {
            this.name = "Durant";
            let age = 30; //此时age为局部变量也是私有属性,外界不可以直接访问,只能用此类的方法才可以读取或者设置数据
            this.setAge = function(myAge) {
                if (myAge >= 0) {
                    age = myAge;
                }
            }
            this.getAge = function() {
                return age;
            }
            this.say = function() {
                console.log("Hello World");
            }
        }
        let obj1 = new Person();
        console.log(obj1.name);
        obj1.setAge(35);
        // obj1.setAge(-3);  满足不了判断条件
        console.log(obj1.getAge());
        obj1.say();
    </script>

控制台输出:
在这里插入图片描述

注意点:
在给一个对象不存在的属性设置值的时候, 不会去原型对象中查找, 如果当前对象没有就会给当前对象新增一个不存在的属性

由于私有属性的本质就是一个局部变量, 并不是真正的属性, 所以如果通过 对象.xxx的方式是找不到私有属性的, 所以会给当前对象新增一个不存在的属性

    <script>
        function Person() {
            this.name = "Durant";
            let age = 30; //此时age为局部变量也是私有属性,外界不可以直接访问
            this.setAge = function(myAge) {
                if (myAge >= 0) {
                    age = myAge;
                }
            }
            this.getAge = function() {
                return age;
            }
            this.say = function() {
                console.log("Hello World");
            }
        }
        let obj1 = new Person();
        obj1.setAge(35); //操作的是私有属性
        console.log(obj1.getAge());
        obj1.age = -3;	//操作的是公有属性
        console.log(obj1.age);
    </script>

控制台输出:
在这里插入图片描述

在JavaScript中属性和方法分类两类


  实例属性/实例方法
 
    在企业开发中通过实例对象访问的属性, 我们就称之为实例属性
    在企业开发中通过实例对象调用的方法, 我们就称之为实例方法
   
    

   静态属性/静态方法
  
    在企业开发中通过构造函数访问的属性, 我们就称之为静态属性
    在企业开发中通过构造函数调用的方法, 我们就称之为静态方法
    <script>
        function Person() {
            this.name = "Durant";
            this.say = function() {
                console.log("Hello World");
            }
        }

        let obj1 = new Person();
        console.log(obj1.name); //实例属性
        obj1.say(); //实例方法

        Person.age = 10;
        Person.talk = function() {
            console.log("talk");
        }

        console.log(Person.age); // 静态属性
        Person.talk(); //静态方法
    </script>

控制台输出:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值