在寻找从其他语言模拟私有方法时,通常会建议使用Crockford的页面提出这种“priveleged”方法:
function Container(param) {
function dec() {
if (secret > 0) {
secret -= 1;
return true;
} else {
return false;
}
}
this.member = param;
var secret = 3;
var that = this;
this.service = function () {
return dec() ? that.member : null;
};
}
因此,service
可以访问 - 它可以访问私有方法(如dec
)和私有变量(如secret
)。我认为它也可以称为“公共”方法(分配给Container.prototype
的方法)。
但是,service
的每个对象都没有为new Container
重新创建?是否需要额外的时间并消耗额外的内存?就此而言,私人dec
也是如此。
我理解推荐的JS方法是KlassFunction.prototype
,以避免出现这种性能问题。但是,可以用这种方式创建非公开方法吗?
答案 0 :(得分:0)
真的有两种私人。
在运行时严格执行的私有类型。当然,这总是有运行时间的惩罚。这里private
用作安全机制。在Javascript中完全没用。
私有信号通知您与其他开发人员的接口,这些开发人员在运行时没有明显强制执行。你还可以
如果要使用反射,请访问字段。这里private
用于防止意外滥用班级内部。
如果我猜对了,你正试图通过做第一个目标来实现第二个目标。第二个目标可以实现 只需通过约定并在构建步骤中强制执行这些约定。没有必要将其纳入运行时。
内存使用(实际上放在GC上的压力)不是唯一的问题,封闭类模式非常不灵活,因为你无法重用,共享或继承 任何方式的功能。即使出于临时原因,您也无法访问外部变量。另请阅读http://blog.jcoglan.com/2012/01/19/the-cost-of-privacy/