Freeze-এ বন্দি অবজেক্ট
অনেকেই পোষ্ট লিখে ডিলিট মারে, কমেন্ট করে ডিলিট মারে, মেসেজ পাঠিয়ে ডিলিট মারে, এমনকি প্রেম-ভালোবাসার প্রপোজ করেও ডিলিট মারে। অবজেক্টের ক্ষেত্রেও এমনটা হতে পারে। হয়তো কোনো একজন আপু বয়স বলে ফেলছে। তারপর ভাবল— ছেলেদের স্যালারি আর মেয়েদের বয়স পাবলিকলি বলে ফেলা ঠিক না।
আপু চাচ্ছেন বয়সটা ডিলিট করতে। কীভাবে ডিলিট করবে? জাস্ট delete লিখবে, তারপর অবজেক্টের নাম লিখে একটা ডট চিহ্ন দিয়ে এরপর যে প্রোপার্টি ডিলিট করতে চায়, সেটার নাম লিখে দিবি, তাহলেই হবে। অনেকটা নিচের মতো করে—
const person = { name: "Alice", age: 25, country: "Bangladesh" };
delete person.age;
console.log(person);
Output: { name: 'Alice', country: 'Bangladesh' }এখানে আমরা age প্রোপার্টিটা ডিলিট করেছি। তাই person অবজেক্টে আর age নাই হয়ে গেছে।
Object.freeze()
আবার কিছু কিছু সময় উল্টা বিষয় থাকে। যে প্রোপার্টির মান ডিলিট করা যাবে না, এমনকি কোনো মানও পরিবর্তন করতে দিবে না, নতুন কোনো প্রোপার্টি যোগ করতে দিবে না। এমন কিছু করতে চাইলে অবজেক্টকে ফ্রিজে রেখে দিতে হবে Object.freeze ইউজ করে নিচের মতো। তারপর দেখবি, নতুন প্রোপার্টি যোগ করতে চাইলে যোগ হবে না। কোনো মান চেইঞ্জ করতে চাইলে সেটা চেইঞ্জ হবে না। এমনকি কোনো প্রোপার্টি ডিলিট করতে চাইলে সেটা ডিলিট হবে না।
const adminUser = {
username: "admin",
email: "admin@example.com",
role: "superadmin"
};
Object.freeze(adminUser);
// Attempt to modify the object
adminUser.role = "user";
adminUser.password = "123456";
delete adminUser.email;
console.log(adminUser);
Output: {username: 'admin', email: 'admin@example.com', role: 'superadmin'}Seal
অনেক সময় অবজেক্টের প্রোপার্টি ডিলিট করতে বা নতুন প্রোপার্টি যোগ করতে না দিলেও যেসব প্রোপার্টি অলরেডি আছে, সেগুলাকে মোডিফাই করতে দিতে হয়। বিশেষ করে একজন ইউজার যদি থাকে, তাহলে তার ই-মেইল বা নাম চেইঞ্জ করতে না দিলেও তার পাসওয়ার্ড কিন্তু চেইঞ্জ করতে দিতে হয়। সেজন্য freeze ইউজ না করে seal ইউজ করা যেতে পারে।
const user = {
username: "johndoe",
email: "john.doe@example.com",
password: "oldpassword"
};
Object.seal(user);
// Attempt to modify the object
user.password = "newpassword"; // Allowed
user.age = 30; // adding new property is not allowed
delete user.email; // deleting property is not allowed
console.log(user);
Output: {username: 'johndoe', email: 'john.doe@example.com', password: 'newpassword'}Seal vs freeze
seal আর ফ্রিজ কাছাকাছি টাইপের জিনিস। হালকা ডিফারেন্স হচ্ছে, seal প্রোপার্টির মান চেইঞ্জ করতে দেয়, আর freeze সেটাও করতে দেয় না।
JavaScript Object Protection Practice:
- ধর, তোর একটা headphone অবজেক্ট আছে, যার মধ্যে brand: "Sony", price: 3000, আর color: "red"। Object.freeze() মেথড ব্যবহার করে অবজেক্টটা freeze কর। এরপর আরেকটা নতুন প্রোপার্টি যোগ করতে চেষ্টা কর। দেখ, কাজ করে কি না।
- const player = { name Messi, goals 800, club Inter Miami }; Object.freeze() মেথড ব্যবহার করে অবজেক্ট ফ্রিজ কর। তারপর নতুন প্রোপার্টি যোগ করে দেখ, কাজ করে কি না।
- const book = { title Harry Potter, author JK Rowling, pages 500 }; Object.seal() ব্যবহার করে অবজেক্ট সিল কর। তারপর author প্রোপার্টি চেঞ্জ করে দেখ।
- একটা gadget অবজেক্ট বানা, যার মধ্যে name iPhone, price 120000, আর color Black থাকবে। delete ব্যবহার করে price ডিলিট কর।
- একটা animal অবজেক্ট বানা, যার মধ্যে name Tiger, location Sundarban থাকবে। এখন এমন কিছু কর, যাতে টাইগারের লোকেশন চেইঞ্জ করা না যায়।
- const food = { name Pizza, price 500, size Large }; এমন কিছু কর, যাতে food-এর মধ্যে নতুন প্রোপার্টি যোগ করা যাবে না। তবে চাইলে দাম বাড়ানো বা কমানো যাবে।