2011-03-23 15 views
18

मैं XULRunner साथ काम कर रहा हूँ और एक कोड नमूने में निम्नलिखित पैटर्न में आए:क्या जावास्क्रिप्ट को सी # जैसे कीवर्ड मिलते हैं/सेट करते हैं?

var StrangeSample = { 

backingStore : "", 

get foo() { return this.backingStore + " "; }, 

set foo(val) { this.backingStore = val; }, 

func: function(someParam) { return this.foo + someParam; } 
}; 

StrangeSample.foo = "rabbit"; 
alert(StrangeSample.func("bear")); 

यह "खरगोश भालू" में जो परिणाम को सतर्क कर दिया जा रहा है।

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

संदर्भ के लिए, एक वाक्यविन्यास त्रुटि में "प्राप्त करें" या "सेट" परिणामों को हटा दें। उन्हें किसी और चीज का नाम बदलना एक वाक्यविन्यास त्रुटि है। वे वास्तव में कीवर्ड होने लगते हैं।

क्या कोई मेरे लिए इस पर कुछ प्रकाश डाल सकता है, या मुझे संदर्भ के लिए इंगित कर सकता है?

+0

साई। और पूछने के तुरंत बाद, मुझे एक प्रासंगिक लिंक मिल गया। यह जावास्क्रिप्ट 1.5 है: – chinchilla

+0

यह क्रोम के कुछ संस्करणों में काम करता है, लेकिन कीवर्ड के बिना गेटर्स/सेटर्स का उपयोग करके आप बेहतर हैं। –

+1

आप एक उत्तर में मिले प्रासंगिक लिंक को पोस्ट कर सकते हैं, थोड़ी देर प्रतीक्षा करें (यह अनिवार्य है) और फिर उस उत्तर को स्वीकार करें। इससे अन्य लोगों की मदद मिलेगी जो एक ही चीज़ की तलाश में आते हैं, आप शायद कुछ प्रतिष्ठा अंक प्राप्त करेंगे, और आपको लगता है कि इंटरनेट को बेहतर जगह बनाने के साथ गर्म अस्पष्ट लग रहा है। –

उत्तर

14

Martinho द्वारा सुझाव दिया गया है, यहाँ कुछ गेटर समझा लिंक हैं/जे एस 1.5 में setters:

http://ejohn.org/blog/javascript-getters-and-setters/

http://ajaxian.com/archives/getters-and-setters-in-javascript

हालांकि ध्यान रखें, वे नहीं IE में समर्थित होना प्रतीत होती हैं , और कुछ डेवलपर्स के पास साइड इफेक्ट्स वाले वैरिएबल असाइनमेंट के विचार के बारे में (वैध) चिंताएं हैं।

डैनियल बताते हुए आरक्षित कीवर्ड आरक्षित/सेट नहीं हैं। मुझे "गेट" और "सेट" नामक शीर्ष-स्तरीय फ़ंक्शंस बनाने और ऊपर पोस्ट किए गए कोड-नमूने के साथ-साथ उपयोग करने में कोई समस्या नहीं थी। तो मुझे लगता है कि पार्सर इसे अनुमति देने के लिए पर्याप्त स्मार्ट है। वास्तव में, यहां तक ​​कि निम्न (यदि भ्रामक) वैध प्रतीत हो रहा है:

var Sample = { 
    bs : "", 
    get get() { return this.bs; }, 
    set get(val) { this.bs = val; } 
} 
+0

वाह, 'सेट मिल' वास्तव में कैसे पार्स किया जाता है? – Pacerier

0

जावास्क्रिप्ट setters और Getters:

आमतौर पर सेटर और गेटर तरीकों को JavaScript ऑब्जेक्ट में निम्न सिंटैक्स का पालन करें। एक वस्तु एकाधिक गुणों के साथ बनाई गई है। सेटर विधि में एक तर्क है, जबकि गेटर विधि में कोई तर्क नहीं है। दोनों कार्य हैं।

किसी दिए गए संपत्ति है कि पहले से ही वस्तु के भीतर बनाई गई है के लिए, सेट विधि आम तौर पर एक अगर/किसी और बयान है कि किसी भी समय है कि संपत्ति सीधे पहुँचा और कोड, उर्फ ​​"सेट" के माध्यम से बाद में असाइन किया गया है के लिए इनपुट की पुष्टि करता है। यह अक्सर एक if (typeof [arg] === 'निश्चित प्रकार का मान, जैसे: संख्या, स्ट्रिंग, या बूलियन') कथन का उपयोग करके किया जाता है, तो कोड ब्लॉक आमतौर पर इसे निर्दिष्ट करता है। (विशिष्ट) संपत्ति-नाम तर्क के लिए। (कभी-कभी कंसोल पर लॉग इन करने वाले संदेश के साथ।) लेकिन इसे कुछ भी वापस करने की आवश्यकता नहीं है; यह तर्क के मूल्यांकन के लिए बस इस विशिष्ट विशेषता को सेट कर रहा है। अन्य बयान, हालांकि, लगभग हमेशा एक (त्रुटि) संदेश कंसोल पर लॉग होता है जो उपयोगकर्ता को संपत्ति की कुंजी-मान के लिए एक अलग मान दर्ज करने के लिए संकेत देता है जो कि स्थिति को पूरा करता है।

गेटर विधि मूल रूप से विपरीत है। यह किसी भी तर्क के बिना, "प्राप्त करने" के लिए कोई फ़ंक्शन सेट करता है, यानी जब आप केवल उस विशिष्ट-संपत्ति को कॉल करते हैं जिसे आप सेट करते हैं तो एक (नोटर) मान/संपत्ति वापस कर दें। यह उस ऑब्जेक्ट प्रॉपर्टी को कॉल करने के जवाब में आपको सामान्य रूप से प्राप्त होने वाली चीज़ से अलग कुछ मिलता है।

सेटर्स और गेटर्स का मूल्य आसानी से संपत्ति कुंजी-मानों के लिए देखा जा सकता है जिन्हें आप सीधे संशोधित नहीं करना चाहते हैं, जब तक कि कुछ शर्तों को पूरा नहीं किया जाता। इस प्रकार के गुणों के लिए, संपत्ति नाम को आगे बढ़ाने के लिए अंडरस्कोर का उपयोग करें, और गेटटर का उपयोग करें ताकि आप बिना अंडरस्कोर के संपत्ति को कॉल कर सकें। फिर उन स्थितियों को परिभाषित करने के लिए एक सेटटर का उपयोग करें जिसके द्वारा संपत्ति के कुंजी-मूल्य को एक्सेस किया जा सकता है और असाइन किया जा सकता है, a.k.a. "set"। उदाहरण के लिए, मैं इस ऑब्जेक्ट की गुणों के लिए दो मूल सेटर्स और गेटर्स शामिल करूंगा। नोट: मैं स्थिर चर का उपयोग करता हूं क्योंकि ऑब्जेक्ट्स म्यूटेबल रहते हैं (सृजन के बाद)।

const person = { 
_name: 'Sean'; 
_age: 27; 

set age(ageIn) { 
if (typeof ageIn === 'number') { 
    this._age = ageIn; 
} 
else { 
    console.log(`${ageIn} is invalid for the age's key-value. Change ${ageIn} to/into a Number.`); 
    return 'Invalid Input.'; 
} 
}, 

get age() { 
return this._age; 
}, 

set name(nameIn) { 
if (typeof nameIn === 'string') { 
     this._name = nameIn; 
     } else { 
     console.log(`Change ${nameIn} to/into a(ny) String for the name's 
key-value.`); 
     return 'Invalid Input.'; 
    } 
}, 

get name() { 
return this._name; 
} 

}; 

कहाँ यह दिलचस्प हो जाता है जब आप सेट करने का प्रयास /, _age संपत्ति के लिए नई कुंजी-मान असाइन क्योंकि यह क्रम में अगर सशर्त पूरा करने के लिए सफलतापूर्वक असाइन करना होता है, जिसका अर्थ है कि सभी कार्य मान्य होते हैं , आदि

person.age = 'twenty-eight'; /* output: twenty-eight is invalid for the 
age's key-value. Change twenty-eight to/into a Number. */ 
console.log(person.age); // output: 27 (twenty-eight was never assigned) 
person.age = 28; // output: none 
console.log(person.age); // output: 28 

ध्यान दें कि मैं व्यक्ति के माध्यम से व्यक्ति.एज संपत्ति का उपयोग कैसे कर सकता हूं। संपत्ति संपत्ति प्राप्तकर्ता विधि के लिए धन्यवाद। साथ ही, उम्र के लिए इनपुट संख्याओं तक सीमित कैसे था, नाम संपत्ति के लिए इनपुट अब प्रतिबंधित/स्ट्रिंग पर सेट है।

आशा है कि इससे चीजों को साफ़ करने में मदद मिलेगी! साथ ही, और अधिक के लिए कुछ लिंक:

https://johnresig.com/blog/javascript-getters-and-setters/

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get

https://www.infragistics.com/community/blogs/infragistics/archive/2017/09/19/easy-javascript-part-8-what-are-getters-and-setters.aspx

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