Javascript”;Privileged”;未按对象重新创建的方法

Javascript "priveleged" methods that are not re-created per object?

本文关键字:创建 方法 Privileged 对象 Javascript 新创建      更新时间:2023-09-26

当四处寻找模拟其他语言的私有方法时,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上,以避免这种性能问题。但是,可以通过这种方式创建非公共方法吗?

实际上有两种私有。

  1. 在运行时严格执行的私有类型。当然,这总是会在运行时受到惩罚。这里使用private作为安全机制。在Javascript中完全无用。

  2. private向其他开发人员发出接口信号,这在运行时显然没有强制执行。你仍然可以如果要使用反射,请访问字段。这里private用于防止类内部的意外误用。

如果我没有猜错的话,你正试图通过完成第一个目标来实现第二个目标。第二个目标可以实现只需通过约定并在构建步骤中强制执行这些约定。没有必要将其纳入运行时。

内存使用(实际上对GC施加的压力)并不是唯一的问题,闭包类模式非常不灵活,因为您不能重用、共享或继承任何方式的功能。而且,即使出于临时原因,也无法访问外部的变量。另请阅读http://blog.jcoglan.com/2012/01/19/the-cost-of-privacy/