有没有一种方法可以在ES6类上拥有内部方法

Is there a way to have internal methods on ES6 classes?

本文关键字:方法 ES6 内部 拥有 一种 有没有      更新时间:2023-09-26

我目前在javascript项目中使用ALTJS,因此几乎只能使用ES6类。

我的问题是关于上述课程的。有没有办法拥有私有的内部方法?例如:

class something() {
  constructor(){}
  methodOne(){}
  methodTwo(){}
}

不能从方法一内部访问方法二,反之亦然。在这种情况下,拥有内部效用函数的正确方法是什么。例如,一些完成计算的代码,应该使用多个方法,我不想重复多次(DRY)。

我知道有静态方法。然而,我不得不通过调用something.staticMethod来访问这些方法,这似乎很奇怪。在这种情况下,没有必要将该方法公开。

我在网上读了很多es6课程的文章,但似乎没有一篇能解决这个问题。

谢谢!

JavaScript对象总是"完全公开"的。如果你有权访问一个对象,你可以完全遍历它,(目前)没有办法限制它。

可以使用以下几种方法隐藏"私有"或"内部"功能或数据:

  1. 如果使用模块系统,则仅导出公共部分:

    function priv() {
      //do something
    }
    export class TheClass {
      myMethod() { priv(); }
    }
    
  2. 您可以将代码封装在IIFE:中

    const TheClass = (function() {
      function priv() {
        //do something
      }
      return class TheClass {
        myMethod() { priv(); }
      }
    })();
    

是的,您只是将"内部"方法放在导出的方法之外。

function privateMethod() {
  //Do some private stuff.
}
export default somefunction() {
  //Do some stuff
  privateMethod();
}

或者,如果你想把你的助手方法放在一个单独的文件中,并在需要时导入它们,你可以这样做:

import { methodOne, methodTwo } from "./helpers.js";
export default somefunction() {
  //Do some stuff
  methodOne();
}