यह ऑब्जेक्ट्स के साथ बनाई गई Arrays की तरह दिखता है जैसे Arrays और Arrays की तरह quack, लेकिन अभी भी असली सरणी नहीं हैं। कम से कम v8/node.js. के साथऑब्जेक्ट.क्रेट के साथ बनाई गई जावास्क्रिप्ट Arrays - असली Arrays नहीं?
> a = []
[]
> b = Object.create(Array.prototype)
{}
> a.constructor
[Function: Array]
> b.constructor
[Function: Array]
> a.__proto__
[]
> b.__proto__
[]
> a instanceof Array
true
> b instanceof Array
true
> Object.prototype.toString.call(a)
'[object Array]'
> Object.prototype.toString.call(b)
'[object Object]'
कुछ जावास्क्रिप्ट गुरु व्याख्या कर सकते हैं क्यों यह इतना है, और कैसे इतना है कि मेरी नवनिर्मित सरणी कोई वास्तविक सरणी से अप्रभेद्य है इसे बनाने के लिए?
मेरा लक्ष्य यहां डेटा संरचनाओं को क्लोन करना है, जिसमें एरेज़ शामिल हैं जिनमें कस्टम गुण संलग्न हो सकते हैं। मैं निश्चित रूप से Object.defineProperty
का उपयोग कर नव निर्मित बनाए गए ऐरे में गुणों को मैन्युअल रूप से संलग्न कर सकता हूं, लेकिन Object.create
का उपयोग करके ऐसा करने का कोई तरीका है?
वे आपके लक्ष्य के लिए अलग-अलग हैं। पूरी तरह से indistingushable कैसे बनाने के लिए - 'बी = []' का उपयोग करें; – kirilloid
@kirilloid - यह कुछ स्थितियों के लिए एक वैध दृष्टिकोण हो सकता है लेकिन ऐसी परिस्थितियों में जहां एक फैक्ट्री फ़ंक्शन आंतरिक रूप से प्रोटोटाइप पैराम के आधार पर नलसाजी करता है, तो आपका सुझाव एक विकल्प नहीं है। जैसे। एक मोनोइड के निर्माण में, इसके साथ शुरू करें: var monad = object.create (प्रोटोटाइप पैराम); यहां, यह सुविधाजनक होगा अगर प्रोटोटाइप पैराम Array.prototype – arcseldon