摘要:闭包实现封装类静态变量静态方法正整数私有属性年龄不是一个正整数一个只能创建个人测试静态变量测试封装效果测试静态函数主要参考设计模式的例子总结可以看到这样实现了封装效果。
什么是封装
封装就是把一个对象保护起来,使其只提供定义的接口方法,而保护私有的变量。打个比方,游戏中的一个人物对象,它的经验只有通过打死怪兽这个接口方法来增加。如果可以直接修改经验就会直接影响到整个游戏的设定。所以这个时候经验这个属性就是一个需要保护的变量。
封装之利封装保护了私有属性,不用担心这些属性会被接口以外的方法以外的修改。更好的解耦。实现迪米特法则(最少知道原则)(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
摘要:对象会记住它的原型给对象提供了一个名为的隐藏属性,某个对象的属性默认会指向它的构造器的原型对象,即。我们通过代码来验证再来实际上,就是对象跟对象构造器的原型联系起来的纽带切记这句话,对未来理解原型链很有帮助。 封装 封装数据 在许多语言的对象系统中,封装数据是由语法解析来实现的,这些语言也许提供了 private、public、protected 等关键字来提供不同的访问权限。例如:j...
摘要:创建对象中,创建对象的基本模式有三种。因此,在设计构造函数时,需要进行慎重考虑。因此在中,这种问题被称作继承破坏封装。静态成员每个只有一份,直接通过类对象进行访问。 什么是封装 找工作时一些公司给了offer后我就想知道真正拿到手的是多少,毕竟赋税繁重。但各种税也好,五险一金也好我实在是弄不清楚,于是我就会在网上的一些税后收入计算器上进行计算,只需要填写一些基本信息,比如税前收入,所...
摘要:属性是一个值或一组值以数组或对象的形式,是对象的成员。可以使用内置构造函数和创建包装对象。因此下面的代码将会使人很迷惑结果结果,此数组长度为应该尽量避免使用数组构造函数创建新数组。给数组对象添加返回数组中最大元素值的方法。 对象部分 Object类型 Object 是一个无序的集合,可以存放任意类型对象,所有其他对象都继承自这个对象。创建Object类型有两种,一种是使用new运算符,...
阅读 2388·2021-09-22 15:41
阅读 1438·2021-08-19 10:54
阅读 1718·2019-08-23 15:11
阅读 3384·2019-08-23 10:23
阅读 1408·2019-08-22 16:28
阅读 784·2019-08-22 15:11
阅读 721·2019-08-22 14:53
阅读 698·2019-08-22 13:49