जिज्ञासु, लेकिन अभी भी उपरोक्त प्रश्न के प्रदर्शन के विषय से उत्तर नहीं मिलता होने के नाते, मैं यह लिखा सार परीक्षण करने के लिए NodeJS दोनों प्रदर्शन और सभी प्रस्तुत (और रन बनाए) समाधान की विश्वसनीयता के लिए।
मैंने एक क्लोन फ़ंक्शन निर्माण की दीवार के समय और क्लोन के निष्पादन की तुलना की है। परिणाम की त्रुटियों के साथ मिलकर परिणाम जिस्ट की टिप्पणी में शामिल हैं।
प्लस मेरे दो सेंट (लेखक के सुझाव के आधार पर):
क्लोन 0 प्रतिशत (तेज लेकिन बदसूरत):
Function.prototype.clone = function() {
var newfun;
eval('newfun=' + this.toString());
for (var key in this)
newfun[key] = this[key];
return newfun;
};
क्लोन 4 प्रतिशत (धीमे लेकिन उन लोगों के लिए जो नापसंद () केवल उनके और उनके पूर्वजों के लिए ज्ञात उद्देश्यों के लिए):
Function.prototype.clone = function() {
var newfun = new Function('return ' + this.toString())();
for (var key in this)
newfun[key] = this[key];
return newfun;
};
प्रदर्शन के लिए, यदि eval / नया फ़ंक्शन आवरण समाधान की तुलना में धीमा है (और यह वास्तव में फ़ंक्शन बॉडी के आकार पर निर्भर करता है), तो यह आपको नंगे फ़ंक्शन क्लोन देता है (और मेरा मतलब है कि गुणों के साथ असली उथले क्लोन) लेकिन अनावश्यक गूंज के बिना) छिपे हुए गुणों, आवरण कार्यों और स्टैक के साथ समस्याओं के साथ।
इसके अलावा हमेशा एक महत्वपूर्ण कारक है जिसे आपको ध्यान में रखना चाहिए: कम कोड, गलतियों के लिए कम स्थान।
Eval / new फ़ंक्शन का उपयोग करने का नकारात्मक पक्ष यह है कि क्लोन और मूल फ़ंक्शन अलग-अलग स्कोप में काम करेंगे। यह उन कार्यों के साथ अच्छी तरह से काम नहीं करेगा जो स्कूप किए गए चर का उपयोग कर रहे हैं। बाइंड-जैसे रैपिंग का उपयोग करने वाले समाधान स्वतंत्र हैं।