最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to declare local function inside ES6 class? - Stack Overflow

programmeradmin2浏览0评论

I have a function that can be used only inside a class and don't want it to be accessible outside the class.

class Auth {
  /*@ngInject*/
  constructor($http, $cookies, $q, User) {
    this.$http = $http;
    this.$cookies = $cookies;
    this.$q = $q;
    this.User = User;

    localFunc(); // Need to create this function, and need it to be accessible only inside this class
  }
}

What I have done so far is declaring the function outside the class

function localFunc() {
  return 'foo';
}
class Auth {
  ...
}

However, this's not good as it pollutes the global function, except I wrapped it inside IIFE. So, is there somehow I can create a local function inside a ES6 class?

I have a function that can be used only inside a class and don't want it to be accessible outside the class.

class Auth {
  /*@ngInject*/
  constructor($http, $cookies, $q, User) {
    this.$http = $http;
    this.$cookies = $cookies;
    this.$q = $q;
    this.User = User;

    localFunc(); // Need to create this function, and need it to be accessible only inside this class
  }
}

What I have done so far is declaring the function outside the class

function localFunc() {
  return 'foo';
}
class Auth {
  ...
}

However, this's not good as it pollutes the global function, except I wrapped it inside IIFE. So, is there somehow I can create a local function inside a ES6 class?

Share Improve this question asked Nov 17, 2015 at 15:00 lvarayutlvarayut 15.3k17 gold badges65 silver badges88 bronze badges 2
  • 3 If you are using an ES6 module loader, declaring the function outside of the class won't pollute global scope. It's the way to go to ensure private functions in ES6 – CodingIntrigue Commented Nov 17, 2015 at 15:11
  • 1 @MichałPerłakowski I don't think it's a duplicate, the suggested canonical deals with stateful, instance-specific properties not functions/methods. – Bergi Commented Jun 1, 2017 at 2:46
Add a ment  | 

2 Answers 2

Reset to default 13

No, there is no way to declare local functions in a class. You can of course declare (static) helper methods and mark them as "private" using underscore prefixes, but that's probably not what you want. And you can always declare the local function inside of a method.

But if you need it multiple times then the only way to go is to place it next to the class. If you are writing a script, an IEFE will be necessary as usual. If you're writing an ES6 module (which is the preferred solution), privacy is trivial: just don't export the function.

You could use a Symbol:

const localFunc = Symbol();
class Auth {
  /*@ngInject*/
  constructor($http, $cookies, $q, User) {
    this.$http = $http;
    this.$cookies = $cookies;
    this.$q = $q;
    this.User = User;

    this[localFunc] = function() {
      // I am private
    };
  }
}
发布评论

评论列表(0)

  1. 暂无评论