资讯专栏INFORMATION COLUMN

JS 设计模式二(封装)

SunZhaopeng / 867人阅读

摘要:闭包实现封装类静态变量静态方法正整数私有属性年龄不是一个正整数一个只能创建个人测试静态变量测试封装效果测试静态函数主要参考设计模式的例子总结可以看到这样实现了封装效果。

什么是封装

封装就是把一个对象保护起来,使其只提供定义的接口方法,而保护私有的变量。打个比方,游戏中的一个人物对象,它的经验只有通过打死怪兽这个接口方法来增加。如果可以直接修改经验就会直接影响到整个游戏的设定。所以这个时候经验这个属性就是一个需要保护的变量。

封装之利

封装保护了私有属性,不用担心这些属性会被接口以外的方法以外的修改。更好的解耦。实现迪米特法则(最少知道原则)(Demeter Principle)

封装之弊

私有方法无法做单元测试,只能对共有方法做单元测试,单元测试用例的设计可能需要对共有方法的覆盖增加保证覆盖越多的私有方法。灵活性降低。对需要封装的对象做很好的理解才能实现别人调用时候需要的接口可以被获取。

闭包实现封装类
var Person = (function () {
  // 静态变量
  var PersonCount = 0;
  // 静态方法
  function checkage(age) {
    var r = /^+?[1-9][0-9]*$/;   //正整数
    return r.test(age);
  }

  return function (name, age) {
    // 私有属性.
    var name, age;
    this.getName = function () {
      return name;
    }
    this.getAge = function () {
      return age;
    }
    this.setName = function (name) {
      name = name || "No Name";
    };
    this.setAge = function (age) {
      if (!checkage(age)) throw new Error("年龄不是一个正整数");
      age = age;
    }
    PersonCount++;
    if (PersonCount > 50) throw new Error("一个只能创建50个人");
    this.setName(name);
    this.setAge(age);
  }
})();
//测试静态变量
/*
 var Persons = [];
 for (var i = 0; i < 51; i++) {
 Persons[i] = new Person(i, i + 1);
 console.log("name:" + Persons[i].getName() + "age:" + Persons[i].getName());
 }
 //*/
//测试封装效果
/*
 var Test = new Person("111", "1");
 console.log(Test.name);
 //*/
//测试静态函数checkage
//var TestAge =new Person("111","asd");

主要参考《javascript设计模式》的例子

总结

可以看到这样实现了封装效果。不过对于私有函数的测试。只能通过测试接口的用例囊括才能实现。对于测试的要求可能就变高了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79342.html

相关文章

  • javascript设计模式与开发实践()- 封装和原型模式

    摘要:对象会记住它的原型给对象提供了一个名为的隐藏属性,某个对象的属性默认会指向它的构造器的原型对象,即。我们通过代码来验证再来实际上,就是对象跟对象构造器的原型联系起来的纽带切记这句话,对未来理解原型链很有帮助。 封装 封装数据 在许多语言的对象系统中,封装数据是由语法解析来实现的,这些语言也许提供了 private、public、protected 等关键字来提供不同的访问权限。例如:j...

    luxixing 评论0 收藏0
  • Javascript 设计模式读书笔记()——封装,简单的创建对象模式

    摘要:创建对象中,创建对象的基本模式有三种。因此,在设计构造函数时,需要进行慎重考虑。因此在中,这种问题被称作继承破坏封装。静态成员每个只有一份,直接通过类对象进行访问。 什么是封装 找工作时一些公司给了offer后我就想知道真正拿到手的是多少,毕竟赋税繁重。但各种税也好,五险一金也好我实在是弄不清楚,于是我就会在网上的一些税后收入计算器上进行计算,只需要填写一些基本信息,比如税前收入,所...

    lentrue 评论0 收藏0
  • JavaScript学习总结()数组和对象部分

    摘要:属性是一个值或一组值以数组或对象的形式,是对象的成员。可以使用内置构造函数和创建包装对象。因此下面的代码将会使人很迷惑结果结果,此数组长度为应该尽量避免使用数组构造函数创建新数组。给数组对象添加返回数组中最大元素值的方法。 对象部分 Object类型 Object 是一个无序的集合,可以存放任意类型对象,所有其他对象都继承自这个对象。创建Object类型有两种,一种是使用new运算符,...

    Lsnsh 评论0 收藏0
  • 前端知识归纳

    摘要:继承性子标签会继承父标签样式优先级行内样式选择器类选择器标签选择器通配符继承机制创建了的元素中,在垂直方向上的会发生重叠。 技能考察: 一、关于Html 1、html语义化标签的理解; 结构化的理解; 能否写出简洁的html结构; SEO优化 a、理解:根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时 让浏览器的爬虫和...

    sixleaves 评论0 收藏0
  • 前端知识归纳

    摘要:继承性子标签会继承父标签样式优先级行内样式选择器类选择器标签选择器通配符继承机制创建了的元素中,在垂直方向上的会发生重叠。 技能考察: 一、关于Html 1、html语义化标签的理解; 结构化的理解; 能否写出简洁的html结构; SEO优化 a、理解:根据内容的结构化(内容语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码的同时 让浏览器的爬虫和...

    NotFound 评论0 收藏0

发表评论

0条评论

SunZhaopeng

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<