有没有办法在ES6类上有内部方法?

时间:2015-11-18 22:16:44

标签: javascript class ecmascript-6

我目前正在我的javascript项目中使用ALTJS,所以我几乎坚持使用ES6类。

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

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

您无法从方法一和副方式中访问方法二。在这种情况下,具有内部效用函数的正确方法是什么。例如,一些完成计算的代码,多个方法应该使用,我不想多次重复(DRY)。

我知道有静态方法。但是,通过调用something.staticMethod然后我必须访问它们似乎很奇怪。在这种情况下,不需要公开该方法。

我在线阅读了很多es6课程文章,似乎没有人能解决这个问题。

谢谢!

2 个答案:

答案 0 :(得分:1)

是的,你只是把“内部”方法放在出口的东西之外。

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();
}

答案 1 :(得分:1)

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(); }
      }
    })();