প্রোটোটাইপটির এক্সটেনশানগুলি তৈরি করার প্রস্তাব দেওয়া হয় না, আপনি যখন আপনার কোড / উপাদানগুলিতে পরীক্ষাগুলি তৈরি করবেন তখন এটির সমস্যার সমাধান হবে। ইউনিট পরীক্ষার ফ্রেমওয়ার্কগুলি স্বয়ংক্রিয়ভাবে আপনার প্রোটোটাইপ এক্সটেনশানগুলি গ্রহণ করবে না। সুতরাং এটি একটি ভাল অনুশীলন নয়। এখানে প্রোটোটাইপ এক্সটেনশনের আরও ব্যাখ্যা রয়েছে কেন দেশীয় অবজেক্টগুলিকে প্রসারিত করা একটি খারাপ অভ্যাস?
জাভাস্ক্রিপ্টে অবজেক্টগুলি ক্লোন করার জন্য কোনও সহজ বা সোজা উপায় নেই। "অগভীর অনুলিপি" ব্যবহার করে এখানে প্রথম উদাহরণ দেওয়া হয়েছে:
1 -> অগভীর ক্লোন:
class Employee {
constructor(first, last, street) {
this.firstName = first;
this.lastName = last;
this.address = { street: street };
}
logFullName() {
console.log(this.firstName + ' ' + this.lastName);
}
}
let original = new Employee('Cassio', 'Seffrin', 'Street A, 23');
let clone = Object.assign({},original);
let cloneWithPrototype Object.create(Object.getPrototypeOf(original)), original)
let clone2 = { ...original };
clone.firstName = 'John';
clone.address.street = 'Street B, 99';
ফলাফল:
আসল.লগ ফুলনাম ():
ফলাফল: ক্যাসিও সেফরিন
ক্লোন.লগ ফুলনাম ():
ফলাফল: জন সেফরিন
original.address.street;
ফলাফল: 'স্ট্রিট বি, 99' // লক্ষ্য করুন যে আসল সাব অবজেক্টটি পরিবর্তন করা হয়েছিল
বিজ্ঞপ্তি: উদাহরণটির নিজস্ব বৈশিষ্ট্য হিসাবে ক্লোজারগুলি থাকলে এই পদ্ধতিটি এটি মোড়বে না। ( ক্লোজারগুলি সম্পর্কে আরও পড়ুন ) এবং আরও, সাব অবজেক্ট "ঠিকানা" ক্লোন হবে না।
ক্লোন.লগ ফুলনাম ()
কাজ করবে না.
ক্লোনওয়েথপ্রোটোটাইপ.লগ ফুলনাম ()
কাজ করবে, কারণ ক্লোনটি এর প্রোটোটাইপগুলিও অনুলিপি করবে।
অবজেক্ট.সেসাইন দিয়ে অ্যারেগুলি ক্লোন করতে:
let cloneArr = array.map((a) => Object.assign({}, a));
ECMAScript স্প্রেড সিনট্যাক্স ব্যবহার করে ক্লোন অ্যারে:
let cloneArrSpread = array.map((a) => ({ ...a }));
2 -> গভীর ক্লোন:
সম্পূর্ণ নতুন অবজেক্ট রেফারেন্স সংরক্ষণাগার করতে আমরা JSON.stringify () ব্যবহার করতে পারি মূল স্ট্রিংটিকে পার্সিং হিসাবে এবং পার্স করার পরে এটি JSON.parse () এ ফিরে আসে।
let deepClone = JSON.parse(JSON.stringify(original));
গভীর ক্লোন দিয়ে ঠিকানার রেফারেন্স রাখা হবে। তবে ডিপক্লোন প্রোটোটাইপগুলি ছেড়ে দেওয়া হবে, সুতরাং ডিপক্লোন.লগ ফুলনাম () কাজ করবে না।
3 -> তৃতীয় পক্ষের গ্রন্থাগারগুলি:
আর একটি বিকল্প লোড্যাশ বা আন্ডারস্কোরের মতো তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করবে। তারা একটি নতুন অবজেক্ট তৈরি করবে এবং প্রতিটি মানটিকে মূল থেকে নতুন অবজেক্টে তার রেফারেন্সগুলিকে স্মরণে রাখবে।
অ্যান্ডস্কোর: যাক ক্লোনআউন্ডারস্কোর = _ (মূল) .ক্লোন ();
লোড্যাশ ক্লোন: var ক্লোনলোডাশ = _ক্লোনডিপ (আসল);
লোড্যাশ বা আন্ডারস্কোরের ডাউনসাইডটি আপনার প্রকল্পে কিছু অতিরিক্ত গ্রন্থাগার অন্তর্ভুক্ত করার দরকার ছিল। তবে তারা ভাল বিকল্প এবং উচ্চ কর্মক্ষমতা ফলাফল উত্পাদন করে।