【问题标题】:Accessing JavaScript closure from outside从外部访问 JavaScript 闭包
【发布时间】:2015-01-13 19:00:51
【问题描述】:

我有一个 JavaScript 库,它使用闭包实现“私有字段”,大致如下:

function makePublicInterface()
{
    var private = 17;

    return {
        foo: function() { console.log(private); }  
    };
}

我有一个由该函数返回的对象:

    var public = makePublicInterface();

有没有办法,给定“公共”,以某种方式访问​​“私人”? Chrome devtool 当然可以,但我没有看到以编程方式执行此操作的方法,Object 或 Function 中都没有执行此操作的方法。

这纯粹是一个语言问题,我可以在这个特定的库中添加一个访问器方法就好了。

【问题讨论】:

  • 不,没有,关键是关闭变量,而不是让它们在闭包之外访问,所以除了创建公开变量的可访问方法之外没有其他解决方法。
  • 它被称为 private 是有原因的。但是,您可以这样做function getPrivate(instance){var l=console.log, r; console.log=function(p){r=p}; instance.foo(); console.log=l; return r;}

标签: javascript closures


【解决方案1】:

您创建的 API 的客户端无法访问该变量。但是,如果此代码在浏览器中执行,现代调试工具可以在调试器处于其执行范围内时访问此值。

Further Reading

【讨论】:

【解决方案2】:

你不能。

不过,您可以通过控制台调试脚本执行来查看和编辑它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 2015-03-05
    • 2015-04-06
    • 2019-08-01
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多