Javascript”;Privileged”;未按对象重新创建的方法
Javascript "priveleged" methods that are not re-created per object?
当四处寻找模拟其他语言的私有方法时,Crockford的页面通常建议使用这种"私有"方法:
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
)。我认为它也可以调用"public"方法(分配给Container.prototype
的方法)。
但是,不是为new Container
的每个对象都重新创建了service
吗?这不是需要额外的时间和消耗额外的内存吗?私人dec
也是如此。
我知道推荐的JS方法是在KlassFunction.prototype
上,以避免这种性能问题。但是,可以通过这种方式创建非公共方法吗?
实际上有两种私有。
-
在运行时严格执行的私有类型。当然,这总是会在运行时受到惩罚。这里使用
private
作为安全机制。在Javascript中完全无用。 -
private向其他开发人员发出接口信号,这在运行时显然没有强制执行。你仍然可以如果要使用反射,请访问字段。这里
private
用于防止类内部的意外误用。
如果我没有猜错的话,你正试图通过完成第一个目标来实现第二个目标。第二个目标可以实现只需通过约定并在构建步骤中强制执行这些约定。没有必要将其纳入运行时。
内存使用(实际上对GC施加的压力)并不是唯一的问题,闭包类模式非常不灵活,因为您不能重用、共享或继承任何方式的功能。而且,即使出于临时原因,也无法访问外部的变量。另请阅读http://blog.jcoglan.com/2012/01/19/the-cost-of-privacy/
相关文章:
- 如何向Selectize元素添加渲染和创建方法
- 如何在 javascript 中为数组创建方法作为对象的属性
- 有没有办法在应用程序脚本中使用JavaScript为对象创建方法字典
- 如何在 Javascript 和 OOP 中创建方法
- 如何为自定义聚合物元素创建方法并在主应用程序中调用它
- 在 JavaScript 类中创建方法事件
- 意外的令牌'这'同时在对象内部创建方法
- 简单级别,在DOM中选择元素,优化,创建方法函数
- JavaScript静态对象创建方法的差异
- 什么'我的代码在用对象文字表示法创建方法时出错了
- JavaScript对象创建方法
- 在JavaScript中,这些不同的对象创建方法的正确应用是什么?
- 在js中创建方法的问题
- 如何为数组/对象创建方法/函数
- XML解析vs DOM实现创建方法
- 在javascript中创建方法链是否有众所周知的模式
- Javascript对象原型和对象.创建方法
- 如何在JS/Seed的GObject子类中创建方法
- 在forEach()中创建方法
- 在函数内部创建方法