2015-03-24 4 views
11

मैं एक आवृत्ति विधि से एक स्थिर सदस्य का उपयोग करने की कोशिश करता हूं। मैं accessing static member from non-static function in typescript के बारे में पता है, लेकिन मैं नहीं है मुश्किल कोड को वर्ग विरासत अनुमति देना चाहते हैं:टाइपस्क्रिप्ट में उदाहरण विधियों से स्थिर सदस्यों तक कैसे पहुंचे?

typeof this.PREFIX 

उत्तर

19

तरह

class Logger { 
    protected static PREFIX = '[info]'; 

    public log(msg: string) { 
    console.log(Logger.PREFIX + ' ' + msg); // What to use instead of Logger` to get the expected result? 
    } 
} 

class Warner extends Logger { 
    protected static PREFIX = '[warn]'; 
} 

(new Logger).log('=> should be prefixed [info]'); 
(new Warner).log('=> should be prefixed [warn]'); 

मैंने कोशिश की कि चीज़ें अपने आप बस ClassName.property की जरूरत है:

class Logger { 
    protected static PREFIX = '[info]'; 
    public log(message: string): void { 
    alert(Logger.PREFIX + string); 
    } 
} 

class Warner extends Logger { 
    protected static PREFIX = '[warn]'; 
} 

अधिक

से: http://basarat.gitbooks.io/typescript/content/docs/classes.html

टाइपप्रति कक्षाएं स्थिर गुणों उस वर्ग के सभी उदाहरणों द्वारा साझा कर रहे हैं समर्थन करते हैं। एक प्राकृतिक जगह डाल करने के लिए (और उपयोग) उन्हें वर्ग पर ही है और वह है क्या टाइपप्रति करता है:

class Something { 
    static instances = 0; 
    constructor() { 
     Something.instances++; 
    } 
} 

var s1 = new Something(); 
var s2 = new Something(); 
console.log(Someting.instances); // 2 

अद्यतन

आप इसे विशेष उदाहरण के निर्माता से प्राप्त करना चाहते हैं this.constructor का उपयोग करें। अफसोस की बात है कि आपको कुछ प्रकार का दावा करने की आवश्यकता है। मैं नीचे दिखाया गया typeof Logger का उपयोग कर रहा हूं:

class Logger { 
    protected static PREFIX = '[info]'; 
    public log(message: string): void { 
    var logger = <typeof Logger>this.constructor; 
    alert(logger.PREFIX + message); 
    } 
} 

class Warner extends Logger { 
    protected static PREFIX = '[warn]'; 
} 
+0

आपकी अधिक-गिटबुक अद्भुत कार्य है। यूट्यूब वीडियो (पढ़ने के लिए आसान/तेज़) और अधिक पाचन। मुझे प्रकाशित दिनांक समय टिकटें याद आ रही हैं। मुझे कैसे पता चलेगा कि आखिरी बार पेज देखने के बाद से कोई बदलाव आया था? – xmojmr

+1

@xmojmr यहां अपना ईमेल जोड़ें: http://basarat.gitbooks.io/typescript/ – basarat

+0

मुझे ClassName.property का उपयोग करने के बारे में पता है। लेकिन फिर यह Logger.PREFIX का उपयोग उप-वर्गों में भी करेगा जिसका स्वयं का .PREFIX परिभाषित है। –

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