जावास्क्रिप्ट में फ़ंक्शन जैसी चीजों के कई अलग-अलग "समूह" प्रतीत होते हैं।विभिन्न प्रकार के कार्यों के लिए शब्दावली
"नियमित कार्यों":: ये कोष्ठक के साथ और
new
साथ प्रतिदेय हैं यहाँ उनके लिए मेरी बनाया हुआ नाम हैं। अधिकांश कार्य इस श्रेणी में आते हैं।"कन्स्ट्रक्टर-केवल फ़ंक्शंस": ये केवल
new
के साथ कॉल करने योग्य हैं। उदाहरण के लिए,Image
,DOMParser
, आदि"गैर-रचनात्मक कार्य": ये माता-पिता के साथ कॉल करने योग्य हैं, लेकिन
new
के साथ नहीं। उदाहरण के लिए,Math.round
,Function.prototype
।"गैर-कॉल करने योग्य फ़ंक्शंस": ये फ़ंक्शंस बिल्कुल कॉल करने योग्य नहीं हैं। उदाहरण के लिए,
window.constructor
,Document
,NodeList
, आदि
के लिए कार्य करता है के इन विभिन्न समूहों के लिए उचित नाम क्या हैं?
मैं भी यह पता लगाने की कोशिश कर रहा हूँ जो अगर "समूह" एक समारोह में है इसकी [[Prototype]]
(__proto__
) संपत्ति Function.prototype
पर सेट किया जाता है कि क्या के आधार पर निर्धारित किया जा सकता है।
अधिकांश "नियमित कार्यों"
Function.prototype
होगा, लेकिन इसका उपयोग गैर मानक__proto__
हटाया जा सकता है।अधिकांश "कन्स्ट्रक्टर-केवल फ़ंक्शंस" में
Object.prototype
है। मुझे कोई भी मामले नहीं मिल रहा है जहां उनके पासFunction.prototype
है (इसलिए,call
याapply
)। क्या यह हमेशा मामला/spec'd व्यवहार है?"गैर-कन्स्ट्रक्टर फ़ंक्शन" में
Function.prototype
Function.prototype
के अपवाद के साथ अधिकतर प्रतीत होता है। क्या ऐसे अन्य मामले हैं जिनमें है?"गैर-कॉल करने योग्य फ़ंक्शंस" में हमेशा
Object.prototype
लगता है। क्या यह मामला है?
मैं कुछ जवाब यहां का जवाब देंगे:
नियमित समारोह:
function
कंस्ट्रक्टर:constructor
गैर निर्माता:method
गैर प्रतिदेय:interface
यह वास्तव में वह नहीं है जिसे मैं ढूंढ रहा हूं। "फ़ंक्शन" और "कन्स्ट्रक्टर" सामान्य रूप से सामान्य तरीके से सही होते हैं, लेकिन मैं कुछ और विशिष्ट ("गैर-कन्स्ट्रक्टर फ़ंक्शन" इत्यादि) की तलाश में हूं।
"विधि" कोई कह रहा है कि यह new
साथ नहीं कहा जा सकता में "समारोह" की तुलना में बेहतर है, और constructor
भर में है कि यह केवलnew
साथ कहा जा सकता है बात समझ नहीं है।
कई मामलों में, गैर-कॉल करने योग्य फ़ंक्शंस केवल होस्ट ऑब्जेक्ट की constructor
संपत्ति से पहुंच योग्य हैं। मुझे लगता है कि इनमें से अधिकांश अधिक सटीक रूप से "इंटरफेस" से "कन्स्ट्रक्टर" कहलाए जाएंगे।
[सामग्री के बारे में मेजबान देशी वस्तुओं बनाम वस्तुओं]
यह सही रास्ते पर एक तरह से है। this question (और स्वीकृत उत्तर, और इसकी टिप्पणियों) को ध्यान में रखते हुए, कुछ असहमति या भ्रम की प्रतीत होती है कि उपयोगकर्ता द्वारा परिभाषित फ़ंक्शंस होस्ट या मूल ऑब्जेक्ट्स हैं या नहीं।
इससे बचने के लिए, चलो बस उपयोगकर्ता द्वारा परिभाषित कार्यों को यूडीएफ कहते हैं, और इस बारे में चिंता न करें कि वे मेजबान या मूल हैं या नहीं। तो हमारे पास यूडीएफ, होस्ट ऑब्जेक्ट्स और मूल ऑब्जेक्ट्स हैं।
"नियमित कार्यों"
हर यूडीएफ
Object
,String
की तरह मूल निवासी वस्तुओं, आदिwindow.toString
(क्रोम 18 में परीक्षण) की तरहहोस्ट वस्तुओं।
"निर्माता-केवल कार्यों"
कोई देशी वस्तुओं?
होस्ट ऑब्जेक्ट्स
DOMParser
,Image
।
"गैर-निर्माता कार्यों"
Math.round
औरFunction.prototype
की तरह मूल निवासी वस्तुओं।होस्ट ऑब्जेक्ट्स
DOMParser#parseFromString
जैसे होस्ट ऑब्जेक्ट्स।
"गैर प्रतिदेय कार्यों"
कोई देशी वस्तुओं?
NodeList
,DocumentFragment
तरह होस्ट वस्तुओं।
तो ऐसा लगता है कि वहाँ मेजबान वस्तुओं और निर्माता-केवल/गैर प्रतिदेय कार्यों के बीच एक कनेक्शन हो सकता है, लेकिन मेजबान देशी बनाम गैर-निर्माता और नियमित रूप से कार्यों के लिए लागू करने के लिए प्रतीत नहीं होता।
एक निचले स्तर पर। आप और आपके शब्दावली सवाल फिर से! :) – BoltClock
हे, यह दिनों के लिए इस बार मुझे परेशान कर रहा है। मुझे आश्चर्य है अगर मैं सिर्फ कृत्रिम श्रेणियों जहां कोई भी देखते हैं ऊपर बना रही हूँ, लेकिन मैं इसे * कुछ * कॉल करना चाहता हूं। –
[यहां] (https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript) ऑब्जेक्ट-ओरिएंटेड जावाएससीआर के लिए एक अच्छा परिचय है आईपीटी, जो आपके प्रश्न का उत्तर देना चाहिए। – sp00m