蝴蝶书里面在讨论继承时提到了三种方式,第一种是用伪类的方式,通过new关键字来生成新的对象从而继承;第二种则是Object.create。这两种都相对好理解。而作者提到的第三种,函数化模式,在方法的最后写了这样一段话:“
如果对象的所有状态都是私有的,那么该对象就成为一个“防伪(tamper-proof)”对象。该对象的属性可以被替换或删除,但该对象的完整性不会受到损害。如果我们用函数化的样式创建一个对象,并且该对象的所有方法都不使用this或that,那么该对象就是持久性(durable)的。一个持久性对象就是一个简单功能函数的集合。一个持久性的对象不会被入侵。防伪一个持久性的对象时,除非用方法授权,否则攻击者不能访问对象的内部状态。
请问状态私有怎么理解,这段话具体想要表达怎样的意思?
按我理解
私有状态 -> 私有字段
对象的完整性不会受到损害 -> 对象的所有自身状态都是私有状态,就算所有公共接口被篡改了,对象本身的状态依然是完整的
持久性 -> 静态对象
一个持久性对象就是一个简单功能函数的集合 -> 即工具函数
私有字段
在 C# 中:
用 javascript 可以模拟上述特性:
这里使用 ES5 的语法