如何仅从类中导出特定方法?

我有一个包含10个方法的类,在这10个方法中,只有8个应被导出,另外2个用于验证令牌,并且我不希望将其导出,因为用户不需要调用它们(我正在为npmjs写一个包),我的问题是,当类本身使用其他两个方法时,如何仅使用这8种方法导出类?

编辑:添加了一些代码

class StackClass {
  constructor(p1,p2) {
    this.data = {
      p1,p2,accessToken: null,expiresIn: null,tokenType: null
    };
  }

  async getToken() {
    return new Promise(async (resolve,reject) => {
      try {
        let fetchResponse = await fetch(
          "url with this.data.p1 and this.data.p2"
        );
        let fetchData = await fetchResponse.json();
        if (fetchData.status != 200) {
          reject("ERROR");
        } else {
          // get the token and save it in this.data
          this.data.accessToken = fetchData.access_token;
          this.data.expiresIn = fetchData.expires_in;
          this.data.tokenType = fetchData.token_type;
          resolve(fetchData);
        }
      } catch (err) {
        console.log(err);
      }
    });
  }
  async isTokenValid() {
    if (new Date() >= this.data.expiresIn) {
      // Generate a new Token
      try {
        await this.getToken();
      } catch (err) {
        console.log(err);
      }
    }
    // else - Do nothing and use current token saved in this.data.accessToken
  }
  async getData() {
    try {
      await this.isTokenValid();
      await fetch("url2 with this.data.accessToken");
    } catch (err) {
      console.log(err);
    }
  }
}

let user = new StackClass("username","password");

user.isTokenValid(); // SHOULD BE PRIVATE
user.getToken(); // SHOULD BE PRIVATE
user.getData(); // SHOULD BE PUBLIC

WOJIAXIAOMIAN3 回答:如何仅从类中导出特定方法?

为什么不导出一个函数,该函数需要一个参数列表,使用这些参数创建类的对象,然后仅使用 public 方法返回新的对象常量?看看:

my-class.js

class MyClass {

  constructor(f1,f2) {
    this.field1 = f1;
    this.field2 = f2;
  }
  m1() {

    this.m2();
  }
  m2() {

    console.log('this.field1',this.field1);
    this.m3();
  }
  m3() {
    console.log('this.field2',this.field2);
    this._m4();
  }

  _m4() {
    console.log('private m4');
    this._m5();
  }
  _m5() {
    console.log('private m5');
  }
}

module.exports = (f1,f2) => {

  const my = new MyClass(f1,f2);

  return {
    m1: my.m1.bind(my),m2: my.m2.bind(my),m3: my.m3.bind(my),}
}

index.js

const myObj = require('./my-class')('f1','f2');

myObj.m1();

Live demo

这样,您将隐藏 private 方法,该方法不应在模块外部访问。

,

isTokenValidgetToken定义为独立函数。您还应该避免使用显式的Promise构造反模式,仅在可以合理地处理错误的位置使用catch,该位置通常位于异步函数的 caller 中(也许{{1 }},也许是getData类的使用者):

StackClass
本文链接:https://www.f2er.com/3129661.html

大家都在问