2017-01-04 12 views
16

मैं ES6 का उपयोग कर जावास्क्रिप्ट क्लास इंस्टेंस कैसे क्लोन कर सकता हूं।जावास्क्रिप्ट ES6 क्लास उदाहरण क्लोन कैसे करें

मुझे jquery या $ expand के आधार पर समाधान में रूचि नहीं है।

मैंने ऑब्जेक्ट क्लोनिंग की काफी पुरानी चर्चाएं देखी हैं जो बताती हैं कि समस्या काफी जटिल है, लेकिन ईएस 6 के साथ एक बहुत ही सरल समाधान स्वयं प्रस्तुत करता है - मैं इसे नीचे रखूंगा और देख सकता हूं कि लोग सोचते हैं कि यह संतोषजनक है या नहीं।

संपादित करें: यह सुझाव दिया जा रहा है कि मेरा प्रश्न एक डुप्लिकेट है; मैंने जवाब देखा लेकिन यह 7 साल का है और इसमें प्री-ईएस 6 जेएस का उपयोग करके बहुत ही जटिल उत्तर शामिल हैं। मैं सुझाव दे रहा हूं कि मेरा प्रश्न, जो ES6 के लिए अनुमति देता है, नाटकीय रूप से सरल समाधान है।

+2

यदि आपके पास स्टैक ओवरफ़्लो पर पुराने प्रश्न के लिए कोई नया उत्तर है, तो कृपया उस उत्तर को मूल प्रश्न में जोड़ें, केवल एक नया न बनाएं। –

+1

मुझे समस्या दिखाई देती है टॉम है/ईएस 6 कक्षा के उदाहरण "नियमित" ऑब्जेक्ट्स से अलग काम करते हैं। – CreasolDev

+2

इसके अलावा, स्वीकृत उत्तर में कोड का पहला भाग आपके "संभावित डुप्लिकेट" वास्तव में क्रैश प्रदान करता है जब मैं इसे ES6 क्लास – CreasolDev

उत्तर

2
const clone = Object.assign({}, instanceOfBlah); 
Object.setPrototypeOf(clone, Blah.prototype); 

नोट Object.assign की विशेषताओं: यह एक उथले नकल करता है और वर्ग के तरीकों की नकल नहीं है।

यदि आप कॉपी पर गहरी प्रतिलिपि या अधिक नियंत्रण चाहते हैं तो lodash clone functions हैं।

+2

चूंकि ऑब्जेक्ट .create' निर्दिष्ट प्रोटोटाइप के साथ नई ऑब्जेक्ट बनाता है, तो क्यों न केवल क्लोन = ऑब्जेक्ट.साइन (ऑब्जेक्ट.क्रेट (instanceOfBlah), instanceOfBlah) '। इसके अलावा कक्षा के तरीकों की भी प्रतिलिपि बनाई जाएगी। – barbatus

+0

@barbatus हालांकि गलत प्रोटोटाइप का उपयोग करता है, 'Blah.prototype! = InstanceOfBlah'। आपको 'ऑब्जेक्ट .getPrototypeOf (instanceOfBlah)' – Bergi

+0

@Bergi no, ES6 क्लास इंस्टेंस का हमेशा प्रोटोटाइप नहीं होना चाहिए। Https://codepen.io/techniq/pen/qdZeZm देखें कि यह भी उदाहरण के साथ काम करता है। – barbatus

16
let clone = Object.assign(Object.create(Object.getPrototypeOf(orig)), orig) 

मैंने बहुत कोशिश की, अंत में यह मेरे लिए काम किया।

यह प्रोटोटाइप सेट करने से भी बचाता है, क्योंकि they say यह कोड को बहुत धीमा कर देता है।

और यह एक लाइनर है!

+0

यह स्थैतिक तरीकों की प्रतिलिपि नहीं करेगा क्योंकि वे वास्तव में अपने गुणों की गणना नहीं कर रहे हैं। –

+0

@ श्री लवलैम्प और आप स्थैतिक तरीकों की प्रतिलिपि कैसे बना सकते हैं? – flori

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