2

在四处寻找模拟其他语言的私有方法时,通常建议 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;
    };
}

privelegedservice也是如此——它可以访问私有方法(如dec)和私有变量(如secret)。我认为它也可以调用“公共”方法(那些分配给Container.prototype)。

但是,不是为 ?service的每个对象重新创建new Container?不是需要额外的时间并消耗额外的内存吗?dec就此而言,私人也是如此。

我知道推荐的 JS 方法来制作方法是KlassFunction.prototype为了避免这个性能问题。但是非公共方法可以这样创建吗?

4

1 回答 1

0

私人真的有两种。

  1. 在运行时严格执行的那种私有。当然,这总是会产生运行时损失。这里private用作安全机制。在 Javascript 中完全没用。

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

如果我猜对了,您正在尝试通过执行第一个目标来实现第二个目标。第二个目标可以简单地通过约定和在构建步骤中强制执行这些约定来实现。无需将其带入运行时。

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

于 2013-06-27T14:14:22.990 回答