myFoo = Foo(5)
और myFoo = new Foo(5)
पर कॉल करने के बीच क्या अंतर है?
उस कोड के लिए कोई फर्क नहीं है, क्योंकि यह एक वस्तु देता है, और spec का कहना है:
- परिणाम [[कॉल]] आंतरिक बुला का नतीजा हो चलो एफ की संपत्ति, obj
this
मूल्य के रूप में प्रदान करते हुए और तर्क सूची प्रदान करते हुए [[निर्माण]] तर्क के रूप में प्रदान किया गया।
- यदि
Type(result)
Object
है तो परिणाम पर लौटें।
के बाद से है कि समारोह एक परिणाम के एक वस्तु है कि देता है, उसके परिणाम प्रयोग किया जाता है। आप एक अंतर नोटिस होगा अगर यह एक वस्तु वापस नहीं किया था, या यदि वह this
जाँच की, उदाहरण के लिए आप के रूप में यह दुबारा लिखा है:
function Foo(x) {
if (!(this instanceof Foo)) { return new Foo(x); }
this.bar = function() { return x; };
}
// Now instanceof works.
alert((new Foo) instanceof Foo);
क्या जावास्क्रिप्ट में new
करता है, वैसे भी?
new
ऑपरेटर का कारण बनता है कार्य करने के लिए एक नव Object
जिसका प्रोटोटाइप कि समारोह के prototype
संपत्ति है बनाया बाध्य this
साथ कहा जाता है।
उपयोगकर्ता परिभाषित कार्यों के लिए,
new f(a, b, c)
को
// Create a new instance using f's prototype.
var newInstance = Object.create(f.prototype), result;
// Call the function
result = f.call(newInstance, a, b, c),
// If the result is a non-null object, use it, otherwise use the new instance.
result && typeof result === 'object' ? result : newInstance
नोट बराबर है, उस भाषा विनिर्देश वास्तव में दो संचालन, [[Call]] और [[Construct]] साथ कार्यों को परिभाषित करता है, इसलिए कुछ कोने मामलों रहे हैं जहां new
अजीब व्यवहार करता है।
उदाहरण के लिए, बाध्य और बिल्ट-इन कार्य:
var g = f.call.bind(f);
एक समारोह है कि जब कहा जाता है परिभाषित करना चाहिए, बस f
कहता है, तो g
सभी मामलों में f
के रूप में ही होना चाहिए, लेकिन
new g()
पैदा करता
TypeError: function call() { [native code] } is not a constructor
क्योंकि बिल्टिन फ़ंक्शन Function.prototype.call
का समर्थन करता है [[कॉल]] लेकिन [[निर्माण]]।
Function.prototype.bind
new
और नियमित कॉल के आसपास अलग-अलग व्यवहार करता है। this
मान हमेशा कॉल किया जाता है जब इसे बुलाया जाता है, लेकिन जब आप new
का उपयोग करते हैं तो एक नया निर्मित उदाहरण है।
और यदि वे उन Google खोज परिणामों को समझ में नहीं आये, और यहां एक बेहतर स्पष्टीकरण की उम्मीद कर रहे थे, तो आपकी स्नैकी टिप्पणी उन्हें कितनी अच्छी तरह से करती है? –
@ChrisSobolewski क्योंकि अगर हम नहीं जानते कि ओपी इसके बारे में क्या समझ में नहीं आता है, तो हम उसकी मदद कैसे कर सकते हैं? अगर हम नहीं जानते कि अस्पष्ट क्या है तो हम चीजों को कैसे स्पष्ट कर सकते हैं? – Jeff
@ChrisSobolewski, कुछ लोग भूल जाते हैं कि इस साइट का उद्देश्य उन चीजों को साफ़ करना है जिन्हें आप समझ में नहीं आते हैं। सिर्फ इसलिए कि सटीक जानकारी उपलब्ध है और आप इसे समझते हैं। यह साइट चीजों को साफ़ करने के लिए मेरे लिए पूरी तरह से काम करती है। –