gpt4 book ai didi

没有为每个对象重新创建的 Javascript "priveleged"方法?

转载 作者:行者123 更新时间:2023-11-30 06:31:27 25 4
gpt4 key购买 nike

当四处寻找从其他语言模拟私有(private)方法时,通常建议 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 是特权的 - 它可以访问私有(private)方法(如 dec)和私有(private)变量(如 secret)。我假设它也可以调用“公共(public)”方法(分配给 Container.prototype 的方法)。

可是,new Container的每个对象不是都重新创建了service吗?不会花费额外的时间和消耗额外的内存吗?就此而言,私有(private) dec 也是如此。

我了解到,推荐的 JS 制作方法的方法是在 KlassFunction.prototype 上以避免此性能问题。但是非公共(public)方法完全可以用这种方式创建吗?

最佳答案

其实有两种私有(private)。

  1. 在运行时严格执行的私有(private)类型。当然,这总是有运行时惩罚。这里 private 用作安全机制。在 Javascript 中完全没用。

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

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

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

关于没有为每个对象重新创建的 Javascript "priveleged"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17345307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com