2017-04-02 6 views
7

मैं सोच रहा हूँ बनाम अगर वहाँ यह करने के लिए कोई लाभ है:कोणीय 2 टेम्पलेट्स तरीकों ही टिककर खेल

<div>{{getSomething()}}</div> 

    export class MyComp { 
    getSomething() { return ...} 
    } 

इस ओवर:

<div>{{getSomething}}</div> 

export class MyComp { 
    get getSomething() { return ...} 
} 

उपयोग तरीकों ही टिककर खेल गणना किए गए डेटा प्रदर्शित करने के लिए बनाम।

+0

मुझे लगता है कि यह एक ही चीज़ के लिए सिर्फ एक वाक्य रचनात्मक चीनी है। क्या आप कहीं कहीं देख रहे थे कि उनमें से किसी एक का उपयोग करके कोई फायदा है? – galvan

+1

नहीं, यह मेरा सवाल है, मैं समझने की कोशिश कर रहा हूं कि कोई अलग है या नहीं। – ng2user

उत्तर

11

मैंने इसमें गहराई से देखा और टाइपस्क्रिप्ट प्लेग्राउंड के साथ खेला। मैंने दो वर्गों को गेटटर के साथ घोषित किया और दूसरा आपके प्रश्नों में वर्णित विधि प्राप्त करने के साथ।

पहले उदाहरण में हम निम्नलिखित तरीके से संपत्ति के मूल्य प्राप्त करने के लिए एक विधि की घोषणा की::

देखें कि यह कैसे लगता है कि चलो

class Greeter { 
    greeting: string; 
    constructor(message: string) { 
     this.greeting = message; 
    } 
    getGreeting() { 
     return this.greeting; 
    } 
} 

कौन सा जावास्क्रिप्ट यह कैसा दिखता करने के लिए अनुवाद के बाद:

var Greeter = (function() { 
    function Greeter(message) { 
     this.greeting = message; 
    } 
    Greeter.prototype.getGreeting = function() { 
     return this.greeting; 
    }; 
    return Greeter; 
}()); 

और दूसरा उदाहरण है, जहां हम निम्नलिखित तरीके से एक गेटर घोषित के बारे में:

0,123,
class GetterGreeter { 
    _greeting: string; 
    constructor(message: string) { 
     this._greeting = message; 
    } 
    get greeting() { 
     return this._greeting; 
    } 
} 

कौन सा अनुवाद के बाद लगता है कि: (अपना पहला उदाहरण के रूप में)

var GetterGreeter = (function() { 
    function GetterGreeter(message) { 
     this._greeting = message; 
    } 
    Object.defineProperty(GetterGreeter.prototype, "greeting", { 
     get: function() { 
      return this._greeting; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 
    return GetterGreeter; 
}()); 

(आप घोषणा और जावास्क्रिप्ट here के अनुवाद के साथ खेल सकते हैं) आप प्राप्त विधि के साथ देख सकते हैं प्रोटोटाइप पर विधि घोषित की गई है और गेटर पैटर्न टाइपस्क्रिप्ट का उपयोग करके आपके दूसरे उदाहरण में DefineProperty api का उपयोग करता है।

दोनों मामलों में हम एक विधि का आह्वान कर रहे हैं और कोणीय परिवर्तनों की पहचान करने और पुनः प्रस्तुत करने के लिए अपने परिवर्तन का पता लगाने के दौरान एक विधि भी कॉल करेंगे।

जैसा कि मैंने देखा है यह एक ही दृष्टिकोण के लिए केवल एक वाक्य रचनात्मक चीनी है और मुझे किसी एक तरीके के लिए कोई प्रदर्शन लाभ नहीं दिख रहा है।

2

अंतर पहली स्थिति में है जब आप अभिव्यक्ति में फ़ंक्शन का उपयोग करते हैं, लेकिन दूसरे मामले में यह कोई फ़ंक्शन नहीं है। तो तुम

<div>{{getSomething()}}</div> 

export class MyComp { 
    get getSomething() { return ...} 
} 

दूसरी विधि के उपयोग के लाभ का उपयोग कर सकते नहीं है वर्ग के भीतर संपत्ति का कैप्सूलीकरण उपयोग करने के लिए और आप कक्षा के बाहर इसे उपयोग करने की जरूरत है।

गेटर्स और सेटर्स ES5 spec का हिस्सा हैं। आप getter और setter पढ़ सकते हैं।

6

यदि आप गेटटर हैं या कोई विधि तकनीकी दृष्टि से कोई फर्क नहीं पड़ता है।

कुछ इस सम्मेलन का उपयोग करते हैं कि एक गेटर को एक क्षेत्र के समान व्यवहार करना चाहिए, और महंगा गणना नहीं करना चाहिए, जबकि गणना का उपयोग किया जाना चाहिए यदि गणना कुछ बहुत ही बुनियादी चीजों से अधिक है उदाहरण के लिए पहले- मध्य- और अंतिम नाम।

मुझे लगता है कि कोणीय के लिए उस भेद का पालन करने के लिए यह अच्छा अभ्यास है, क्योंकि देखने के लिए महंगा गणना बाध्यकारी से बचा जाना चाहिए क्योंकि विधि या गेटर को अक्सर बुलाया जा सकता है। ऐसे मामले में परिणाम को फ़ील्ड में स्टोर करना और इसके बजाय फ़ील्ड से जुड़ना बेहतर होता है।

बाइंडिंग देखने में बहुत महत्वपूर्ण है, कि कोई निर्भरता संशोधित नहीं होने पर विधि या गेटर बाद के कॉल पर अलग-अलग मान वापस नहीं लौटाता है (जैसे return {};, जिसे नए ऑब्जेक्ट इंस्टेंस के रूप में माना जाएगा और "अभिव्यक्ति की तरह एक त्रुटि हो सकती है पिछली बार जांच के बाद से बदल दिया गया। ")

+0

मुझे लगता है कि आपका मतलब था "मुझे लगता है कि यह ** ** ** कोणीय के लिए एक अच्छा अभ्यास नहीं है"। मतलब हमें टेम्पलेट में विधियों/गेटर्स का उपयोग नहीं करना चाहिए। मैंने गलत समझा होगा कि :-) – echonax

+1

असल में, मेरा मतलब यह था कि मैंने इसे लिखा था, लेकिन इस संकेत के लिए धन्यवाद कि यह मेरे लिए पर्याप्त स्पष्ट नहीं था। बाध्यकारी में गेटर्स और विधियों का उपयोग करना स्वयं से बुरा नहीं है, लेकिन खेतों में बाध्यकारी भी अधिक कुशल है। मेरा मुख्य बिंदु यह था कि महंगा विधि कॉल के लिए बाध्यकारी निश्चित रूप से टालना चाहिए। –

+0

क्या यह एक महंगी विधि होगी जो एक Array.filter() ऑपरेशन बनाती है? एक दृश्य में जहां आप कुछ फ़ील्ड द्वारा मुख्य डेटा फ़िल्टर करना चाहते हैं। – mariogl

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