javascript - 在 javascript 库中的导出类之外声明函数是实现私有(private)函数的好习惯吗?

标签 javascript ecmascript-6 es6-modules es6-class

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

我偶然发现了一种约定,即通过在类中添加下划线 _ 前缀来在类中创建私有(private)函数,但仍然可以访问它们。它看起来像这样:

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

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

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

function privateFunction() {
  ...
}

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

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

最佳答案

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

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

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

function privateFunction(self) {
  …
}

关于javascript - 在 javascript 库中的导出类之外声明函数是实现私有(private)函数的好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57197810/

相关文章:

typescript - "SyntaxError: Cannot use import statement outside a module"使用带有 lit-html 的 typescript 编写测试时

javascript - 在 TypeScript 中使用命名空间访问全局方法

javascript - 如何使用 IndexedDB objectStore 中的值自动填充选择框?

javascript - Android/Phonegap - onClick() 不工作

javascript - 如何在项目中使用多个if条件

javascript - 如何通过按开始按钮使时钟滴答作响

javascript - 以迭代方式查找对象的深度

javascript - 在 JavaScript 中调用 getter 函数及其名称?

javascript - 在 Angular 应用程序中使用 ES6 模块库和意外 token 'export' 错误

ecmascript-6 - 内联导入默认导出到数组