ECMAScript 5 অবজেক্ট মডিফিকেশন প্রতিরোধের জন্য বেশ কয়েকটি মেথড ইন্ট্রোডিউস করেছে। এই প্রতিরোধামূলক উপায়গুলো নিশ্চিত করে কেউ আকস্মিক বা অনিচ্ছাকৃতভাবেও অবজেক্টের ফাংশনালিটি পরিবর্তন করতে পারে না।
প্রতিরোধের ৩ লেভেল
১) প্রিভেন্ট এক্সটেনশন (Prevent Extensions)
এই লেভেলে কোনো নতুন প্রপার্টি বা মেথড যোগ করা যায় না, কিন্তু এক্সিস্টিং প্রপার্টি/মেথড এক্সেস করা যায়। অবজেক্ট ডিলিট করা সম্ভব। Object.preventExtensions() মেথড এটি সম্পন্ন করে।
উদাহরণ
<html> <body>
<script>
var object1 = { prop1: 1 };
Object.preventExtensions(object1);
delete object1.prop1; // ভ্যালু ডিলিট হয়েছে
try {
Object.defineProperty(object1, 'prop2', { value: 2 });
} catch (err) {
document.write(err);
}
document.write("</br>");
document.write(object1.prop1);
</script>
</body> </html>
আউটপুট
TypeError: Cannot define property prop2, object is not extensible undefined
২) সিল (Seal)
প্রিভেন্ট এক্সটেনশনের সকল ফিচারের পাশাপাশি এটি এক্সিস্টিং প্রপার্টি/মেথড ডিলিট করতে দেয় না। Object.seal() মেথড এটি সম্পন্ন করে।
উদাহরণ
<html> <body>
<script>
var object1 = { prop1: 1 };
Object.seal(object1);
object1.prop1 = 2; // ভ্যালু চেঞ্জ হয়েছে
delete object1.prop1; // ডিলিট হবে না
try {
Object.defineProperty(object1, 'prop2', { value: 2 });
} catch (err) {
document.write(err);
}
document.write("</br>");
document.write(object1.prop1); // ২ দেখাবে কারণ সিলড
</script>
</body> </html>
আউটপুট
TypeError: Cannot define property prop2, object is not extensible 2
৩) ফ্রিজ (Freeze)
সিলের সব ফিচারের পাশাপাশি এটি এক্সিস্টিং প্রপার্টি এক্সেস/মডিফাই করতে দেয় না। Object.freeze() মেথড দিয়ে অবজেক্ট ফ্রিজ করা হয়। এটি অবজেক্টকে ইমিউটেবল বানায়।
উদাহরণ
<html> <body>
<script>
var object1 = { prop1: 1 };
Object.freeze(object1);
object1.prop1 = 2; // আপডেট হবে না
delete object1.prop1; // ডিলিট হবে না
try {
Object.defineProperty(object1, 'prop2', { value: 2 });
} catch (err) {
document.write(err);
}
document.write("</br>");
document.write(object1.prop1); // ১ দেখাবে, ২ হয়নি
</script>
</body> </html>
আউটপুট
TypeError: Cannot define property prop2, object is not extensible 1
সারসংক্ষেপ
- preventExtensions: নতুন প্রপার্টি যোগ করা যায় না
- seal: নতুন প্রপার্টি যোগ/ডিলিট করা যায় না, এক্সিস্টিং মডিফাই করা যায়
- freeze: সম্পূর্ণ ইমিউটেবল - কিছুই পরিবর্তন করা যায় না