2015-11-17 4 views
8

मेरे पास एक ऐसा फ़ंक्शन है जिसका उपयोग केवल कक्षा के अंदर किया जा सकता है और यह कक्षा के बाहर पहुंच योग्य नहीं होना चाहता।ईएस 6 कक्षा के अंदर स्थानीय समारोह कैसे घोषित करें?

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

बाहर समारोह की घोषणा कर रहा है क्या किया बहरहाल, यह अच्छा के रूप में यह वैश्विक समारोह को प्रदूषित करता है, को छोड़कर मैं इसे Iife अंदर लिपटे। तो, क्या कोई तरीका है कि मैं एक ईएस 6 कक्षा के अंदर एक स्थानीय समारोह बना सकता हूं?

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

यदि आप ईएस 6 मॉड्यूल लोडर का उपयोग कर रहे हैं, तो वर्ग के बाहर समारोह घोषित करने से वैश्विक दायरे को प्रदूषित नहीं किया जाएगा। ES6 – CodingIntrigue

+1

@ MichałPerłakowski में निजी कार्यों को सुनिश्चित करने का यह तरीका है, मुझे नहीं लगता कि यह एक डुप्लिकेट है, [सुझाया गया कैननिकल] (https://stackoverflow.com/questions/22156326/private-properties-in-javascript-es6 -क्लास) * राज्यव्यापी, उदाहरण-विशिष्ट गुणों * कार्यों/विधियों के साथ सौदा करता है। – Bergi

उत्तर

13

नहीं, वहाँ एक class में स्थानीय समारोहों घोषित करने के लिए कोई रास्ता नहीं है:

+0

यदि आप कक्षा के बगल में फ़ंक्शन डालते हैं, तो उसे 'इस' तक पहुंच नहीं होगी, इसलिए आपको इसे पैरामीटर के रूप में पास करना होगा। –

+0

@DanDascalescu निश्चित रूप से, मुझे लगता है कि ओपी जानबूझकर एक * समारोह * के लिए पूछता था * हालांकि * विधि * नहीं। – Bergi

0

आप एक प्रतीक इस्तेमाल कर सकते हैं। आप निश्चित रूप से (स्थैतिक) सहायक विधियों की घोषणा कर सकते हैं और अंडरस्कोर उपसर्गों का उपयोग करके उन्हें "निजी" के रूप में चिह्नित कर सकते हैं, लेकिन संभवतः यह नहीं है कि आप क्या चाहते हैं। और आप हमेशा एक विधि के अंदर स्थानीय समारोह घोषित कर सकते हैं।

लेकिन यदि आपको इसे कई बार चाहिए तो इसे जाने का एकमात्र तरीका class के आगे रखना है। यदि आप एक स्क्रिप्ट लिख रहे हैं, तो सामान्य रूप से एक आईईएफई आवश्यक होगा। यदि आप एक ईएस 6 मॉड्यूल लिख रहे हैं (जो पसंदीदा समाधान है), गोपनीयता छोटी है: बस export फ़ंक्शन नहीं करें।

+1

प्रतीक निजी नहीं हैं। – Bergi

संबंधित मुद्दे