是否可以访问 Javascript 中的私有范围变量或方法?

Is it possible to access to private scoped variables or methods in Javascript?

我有一个第三方库公开了一个指向私有方法的 public 方法。

  const thirdPartyLibrary = function(){
      function privateFunction() {
        return superSecretFunction();
      };
      function superSecretFunction() {
        return Math.random();
      };
      // library public api
      return {
        publicMethod:() => { return privateFunction() }
      }
    }();

我在示例中对其进行了一些简化,但它有点像模块模式的实现。
我想知道是否有可能以某种方式访问​​这些私有方法以改变它们的行为或至少公开它们。

我已尝试访问 this,但正如预期的那样,未列出私有方法。

thirdPartyLibrary.foo = function(){console.log(this)};
thirdPartyLibrary.foo() // private members not listed

显然,我无法更改库的代码:)

不,这是不可能的。闭包作用域变量确实是私有的。

您所能做的就是访问(并覆盖)thirdPartyLibrary 对象的方法,该对象由“库 public api" 对象字面量。这意味着如果需要,您可以用您自己的版本完全替换整个库,但您无法访问其内部结构1.

1: 一些库不小心泄漏了它们的内部结构,例如通过使用内部调用回调作为 this 上下文,但这是模块实现中的错误。