2015-11-17 11 views
8

私はクラス内でしか使用できず、クラスの外でアクセスできないようにする関数を持っています。それは私が生命維持内側に包まれた以外、グローバル関数を汚染としてES6クラス内でローカル関数を宣言するには?

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 
    } 
} 

私がこれまで行ってきたことは、クラスの外

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

を関数を宣言された。しかし、これは良いではありません。では、どういうわけかES6クラス内でローカル関数を作成できますか?

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 
    }; 
    } 
} 
+3

ES6モジュールローダーを使用している場合、クラス外の関数を宣言してもグローバルスコープは汚染されません。それは、ES6でプライベートな機能を確保するために行く方法です – CodingIntrigue

+1

@MichałPerłakowski私はそれが重複しているとは思わない、[提案された標準](https://stackoverflow.com/questions/22156326/private-properties-in-javascript-es6 -classes)は、*ステートフルなインスタンス固有のプロパティを扱います*関数/メソッドではありません。 – Bergi

答えて

13

いいえ、classでローカル関数を宣言する方法はありません。

+0

クラスの隣に関数を置くと、 'this'にアクセスすることができないので、パラメータとして渡す必要があります。 –

+0

@DanDascalescu確かに、OPは意図的に*メソッドではないが*関数*を求めたと思う。 – Bergi

0

あなたはシンボルを使用することができます。もちろん、(静的な)ヘルパーメソッドを宣言してアンダースコア接頭辞を使用してそれらを "プライベート"としてマークすることはできますが、それはおそらくあなたが望むものではありません。また、メソッド内でローカル関数を宣言することもできます。

しかし、複数回必要な場合は、唯一の方法はclassの横に配置することです。スクリプトを書く場合は、いつものようにIEFEが必要になります。あなたがES6モジュール(これは推奨される解決策です)を書いているなら、プライバシーは自明です。ちょうどexportの機能はありません。

+1

シンボルはプライベートではありません。 – Bergi

関連する問題