JavaScript的封装

本文通过具体的JavaScript实例,探讨了封装的概念及其实现方式,包括门户大开型、命名规范区别私有和公有变量的方法,并讨论了如何通过扩展类的原型链进行属性验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,首先,为什么要使用封装?

这是从信息的角度出发的,信息的隐藏是最终的目的,而封装只不过是实现隐藏的一种方法。

这里我们需要明白一点就是:类的定义有如下的三种方式:

(第一种)门户大开型方式       (第二种)用命令规范区别私有和公有的方式    (第三种)闭包

现在详细描述一下每一种类的定义方式:

针对第一种,门户大开类型

首先,我们来看一种情况

(1)声明一个简单的类,代码如下

 

1
2
3
4
5
function Person(age,name) {
       this.name=name;
       
       this.age=age;
   }

 

  (2)实例化类+调用

1
2
var p=new Person(-10,"小明");
alert(p.age)//结果出现年龄出现负数

  从上述的运行结果中,我们可以看出程序可以正常执行,但这并符合实际,因为年龄出现 了负数,这不是我们想要的,我们需要一个能正确处理并产生与实际情况相符的解决方案。

为了能解决上述年龄出现的问题,我们可以这样做:扩展类的原型链

复制代码
Person.prototype={
       checkAge:function (age) {
         if(0<age&&age<150){
             return true;
          }else {
            return false;
               }
                    }
             }
复制代码

加上解决方案后,代码如下

(1)基本类

复制代码
 function Person(age,name) {
        this.name=name;
        //调用方法判断验证
        if(!this.checkAge(age)){
            throw  new Error("年龄必须在0-150之间");
        }
        this.age=age;
    }
复制代码

(2)年龄判断验证

复制代码
  Person.prototype={
                    checkAge:function (age) {
                        if(0<age&&age<150){
                            return true;
                        }else {
                            return false;
                        }
                    }
            }
复制代码

(3)调用

var p2=new Person(10,"小明");
alert(p2.age)

我们还可以给name添加一个读取验证,name为空时使用默认值 同样是扩展类的原型链

代码如下,

复制代码
 Person.prototype["getName"]=function () {
                return this.name||"我是默认的";
            }
//调用
var p3=new Person(10,"");
alert(p3.getName())//结果为“我是默认的”
 
复制代码

 

总结一下:当类被定义为门户大开类型时会出现与实际不符合的情况 ,虽然我们可以加在类上扩展原型类加验证方法解决,但是这样会使类变得臃肿。

 

针对第二种,用命名规范区别私有和公有

步骤如下,

(1)定义类 在类中定义变量(私有和公有变量)+验证方法的调用

复制代码
//用命名规范来区别私有和公有
    function Person(name,age,email) {
        //定义私有变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值