दोनों उदाहरणों में आप चर Array
तय कर रहे हैं एक function
कि secrets
को this
प्रदान करती हो। ऐसा ही होता है कि Array
नामक एक वैश्विक वस्तु पहले से मौजूद है कि पृष्ठ में अन्य जेएस एरे बनाने के लिए Constructor
के रूप में उपयोग नहीं कर सकता है या नहीं। यदि आप अपने कंसोल में पॉप करते हैं और कुछ और होने के लिए ऐरे को फिर से असाइन करते हैं, तो आपको कोड से त्रुटियां मिलना शुरू हो सकता है जो स्पष्ट रूप से Array
पर निर्भर करता है। हालांकि, []
के साथ शाब्दिक रूप से बनाए गए सरणी ठीक काम करते रहते हैं, और वास्तव में, उनके __proto__
अभी भी Array.prototype
पर इंगित करते हैं। तो:
var arr1 = new Array('a','b','c');
// arr[0] -> 'a'
var arr2 = ['d','e','f'];
// arr[0] -> 'd'
var secrets;
Array = function() { secrets = this; };
var arr3 = new Array('g','h','i'); // nothing wrong here, because Array is a function
// arr3[0] -> undefined
// Array is just a function, you can't make arrays with new Array anymore
// and arr3 is just a function
var arr4 = ['j','k','l'];
// arr4[0] -> 'j'
// making array literals still works
this
, अजीब कुछ नहीं के लिए के रूप में, अभी भी this
के नियमों का पालन करती। तथ्य यह है कि आप Array
पर फ़ंक्शन असाइन कर रहे हैं, यह नहीं बदलता कि this
व्यवहार कैसे करता है। आप What is the difference between a function expression vs declaration in Javascript?
: तो वैश्विक वस्तु जो ब्राउज़र में
window
है जब तक आपnew
साथ दृष्टांत या का उपयोगcall
याapply
दोनों नमूनों के बीच का अंतर एक समारोह अभिव्यक्ति और समारोह घोषणा के बीच का अंतर है
this
अंक, देखना यहां दो प्रश्न पूछ रहे हैं। यह कैसे काम करता है [एमडीएन दस्तावेज में] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this) (संक्षेप में: मान इस बात पर निर्भर करता है कि फ़ंक्शन कैसे है कहा जाता है) और क्या 'ऐरे = फ़ंक्शन() ...' या 'फ़ंक्शन ऐरे() ...' वही उत्तर दिया गया है [इस प्रश्न में] (http://stackoverflow.com/q/336859/218196)। –धन्यवाद फेलिक्स। इस 'के बारे में मैंने दस्तावेज पढ़ा है लेकिन उपर्युक्त संदर्भ ** में यह' क्या संदर्भित करता है ** को समझने में सक्षम नहीं था ** ... क्या आप या कुछ कृपया मदद कर सकते हैं ?? मेरे प्रश्न के दूसरे भाग के बारे में, मैंने आपके द्वारा प्रदान की गई पोस्ट पढ़ी है और अब मैं बेहतर समझता हूं। – balteo
यदि आप 'नया 'के साथ' ऐरे 'को कॉल करते हैं, तो यह' Array.prototype' से प्राप्त एक खाली ऑब्जेक्ट को संदर्भित करेगा। यदि इसे 'नया' के बिना बुलाया जाता है, तो यह 'विंडो'' का संदर्भ देगा। यदि इसे '.call' या' .apply' के माध्यम से बुलाया जाता है, तो यह उस तत्व को संदर्भित करेगा जो पहले तर्क के रूप में पारित किया गया है। यह जानने के लिए कि इसे कैसे कहा जाता है, आपको 'JSON.parse' पर एक नज़र रखना होगा। –