在 javascript 库中导出的 class 之外声明一个函数是实现私有函数的好习惯吗?

Is declaring a function outside an exported class in javascript library a good practice to achieve private functions?

我正在尝试制作我自己的 Javascript 库并想仔细考虑一下。

我偶然发现了一个在 class 中创建私有函数的约定,方法是在它前面加上下划线 _,但仍然可以访问它们。它看起来像这样:

export default class Test {
  constructor() {
    this._privateFunction();
  }
  _privateFunction() {
    ...
  }
}

我正在考虑将函数放在导出的 class 之外。这是个好主意吗?

export default class Test {
  constructor() {
    privateFunction();
  }
}

function privateFunction() {
  ...
}

当在导出 class 之外声明时,我找不到访问该函数的方法,因此它似乎是一个可行的替代方案。

这是个好主意吗?它不会在浏览器中产生解析问题吗?

是的,使用闭包使事物(包括函数)保持私有是一种完全正常且常见的方法。解析没有问题

这种方法的一个缺点是私有函数只是一个函数,而不是一个方法。这意味着您需要显式地将实例作为参数传递以使其在其中可用:

export default class Test {
  constructor() {
    privateFunction(this);
  }
}

function privateFunction(self) {
  …
}