ক্ষেত্র
ক্লাস ক্ষেত্রগুলি সরাসরি একটি শ্রেণীর মূল অংশের মধ্যে ঘোষণা করা হয়, this
মানের বৈশিষ্ট্য হিসাবে স্পষ্টভাবে যোগ করা হয় না। যাইহোক, ফলাফল একই: সেই শ্রেণীর উদাহরণে সংজ্ঞায়িত একটি সম্পত্তি।
class MyClass {
myField;
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { myField: undefined }
আপনি একটি মান সহ একটি ক্ষেত্র শুরু করতে পারেন। এটি প্রায়শই একটি ডিফল্ট মান যা ক্লাসের মধ্যে যুক্তি ওভাররাইট করতে পারে:
class MyClass {
myResult = false;
set setValue( myValue ) {
this.myResult = myValue;
}
}
const myClassInstance = new MyClass();
myClassInstance;
> Object { myResult: false }
myClassInstance.setValue = true;
myClassInstance;\
> Object { myResult: true }
ক্লাস ক্ষেত্রগুলি this
ব্যবহার করে ক্লাসের সাথে সংযুক্ত বৈশিষ্ট্যগুলির সাথে কার্যকরীভাবে অভিন্ন। এর মানে অন্য যেকোন সম্পত্তির মতো ক্লাসের বাইরে থেকে এগুলি অ্যাক্সেস এবং পরিবর্তন করা যেতে পারে।
class MyClass {
myField = true;
}
const myClassInstance = new MyClass();
myClassInstance.myField;
> true
myClassInstance.myField = false;
myClassInstance.myField;
> false;
ক্ষেত্রগুলি ক্লাসের আরও উন্নত বৈশিষ্ট্যগুলির জন্য একটি ভিত্তি প্রদান করে।
ব্যক্তিগত ক্ষেত্র এবং পদ্ধতি
একটি ক্লাসের বাইরে ব্যক্তিগত ক্ষেত্র এবং পদ্ধতিগুলি অ্যাক্সেসযোগ্য নয়। একটি ব্যক্তিগত সম্পত্তি একটি ক্লাসের একটি উদাহরণের সাথে যুক্ত, যার অর্থ প্রতিটি উদাহরণে তার নিজস্ব ব্যক্তিগত ক্ষেত্র এবং পদ্ধতির সেট রয়েছে, যেমন ক্লাসে সংজ্ঞায়িত করা হয়েছে।
একটি সম্পত্তি ব্যক্তিগত করতে, আপনি এটি ঘোষণা করার সময় সনাক্তকারীর শুরুতে একটি #
যোগ করুন:
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { #myPrivateField: true }
#myPrivateField: true
<prototype>: Object { … }
constructor: class MyClass {}
<prototype>: Object { … }
একটি প্রাইভেট ফিল্ড অবশ্যই কন্টেন্ট ক্লাসের বডিতে ঘোষণা করতে হবে। আপনি this
একটি বৈশিষ্ট্য হিসাবে পরে এর মান পরিবর্তন করতে পারেন, কিন্তু আপনি this
ব্যবহার করে ক্ষেত্র তৈরি করতে পারবেন না।
একটি স্ক্রিপ্টের অন্য কোথাও থেকে ব্যক্তিগত ক্ষেত্রগুলি অ্যাক্সেস করা যাবে না৷ এটি তাদের থাকা মানগুলির সাথে ইন্টারঅ্যাক্ট করার জন্য প্রদত্ত গেটার এবং সেটার পদ্ধতির বাইরে ডেটা বৈশিষ্ট্যগুলিকে পরিবর্তন করা থেকে বাধা দেয় এবং এটি কেবলমাত্র ক্লাসের মধ্যেই ব্যবহারের উদ্দেশ্যে করা পদ্ধতিগুলিতে সরাসরি অ্যাক্সেসকে বাধা দেয়।
class MyClass {
#myResult = false;
set setValue( myValue ) {
this.#myResult = myValue;
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { #myResult: false }
myClassInstance.#myResult = true;
> Uncaught SyntaxError: reference to undeclared private field or method #myResult
myClassInstance.setValue = true;
myClassInstance;\
> MyClass { #myResult: true }
যাইহোক, মনে রাখবেন যে ব্রাউজারগুলির বিকাশকারী কনসোলগুলি ডিবাগিংয়ের উদ্দেশ্যে ব্যক্তিগত ক্ষেত্রগুলিতে অ্যাক্সেসের অনুমতি দেওয়ার বিষয়ে সাধারনত খুব অনুমোদনযোগ্য , যদিও অসামঞ্জস্যপূর্ণ:
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {
console.log( "This is inside a private method." );
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass {#myPrivateField: true}
myClassInstance.#myPrivateField;
> true
myClassInstance.#myPrivateMethod();
> "This is inside a private method."
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {
console.log( "This is inside a private method." );
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass {#myPrivateField: true}
myClassInstance.#myPrivateField;
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateField
myClassInstance.#myPrivateMethod();
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateMethod
প্রাইভেট ক্ষেত্রগুলি ক্লাসের মূল অংশে দৃঢ়ভাবে স্কোপ করা হয় যেটিতে সেগুলি রয়েছে, যার অর্থ হল এমনকি শিশু ক্লাসগুলিও অভিভাবক শ্রেণীর সাথে যুক্ত ব্যক্তিগত ক্ষেত্রগুলিতে অ্যাক্সেস করতে পারে না:
class MyClass {
#myPrivateField = true;
}
class ChildClass extends MyClass {
childMethod() {
console.log( this.#myPrivateField );
}
}
> Uncaught SyntaxError: reference to undeclared private field or method #myPrivateField
স্ট্যাটিক ক্ষেত্র এবং পদ্ধতি
স্ট্যাটিক ক্ষেত্র এবং পদ্ধতিগুলি নিজেই একটি শ্রেণীর সদস্য, সেই শ্রেণীর উদাহরণের সদস্য নয়। এই কারণে, স্ট্যাটিক ক্ষেত্রগুলি ডেটার জন্য একটি কেন্দ্রীয় বিন্দু প্রদান করে যা একটি ক্লাসের প্রতিটি দৃষ্টান্তের জন্য অনন্য হবে না, তবে সেই দৃষ্টান্তগুলির উল্লেখ করার প্রয়োজন হতে পারে - উদাহরণস্বরূপ, শেয়ার করা কনফিগারেশন তথ্য। স্ট্যাটিক পদ্ধতিগুলি প্রায়শই একটি ক্লাসের দৃষ্টান্তগুলির সাথে কাজ করার জন্য ইউটিলিটি ফাংশন, যেমন একটি ক্ষেত্রের সাথে তুলনা করা বা বাছাই করা।
একটি ক্লাসের শরীরে স্ট্যাটিক ক্ষেত্র এবং পদ্ধতিগুলি সংজ্ঞায়িত করতে, static
কীওয়ার্ডটি ব্যবহার করুন:
class MyClass {
static myStaticField;
static myStaticMethod() {}
}
const myClassInstance = new MyClass();
আপনি একটি স্ট্যাটিক পদ্ধতি তৈরি করতে ডট নোটেশন ব্যবহার করতে পারেন:
class MyClass {
constructor() {}
}
MyClass.myStaticMethod = function() {}
আপনি তাদের ক্লাসের একটি উদাহরণ থেকে স্ট্যাটিক বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারবেন না, তবে তারা ক্লাস কনস্ট্রাক্টরে উপলব্ধ:
class MyClass {
static myStaticField = true;
static myStaticMethod() {
console.log( "A static method." );
}
}
const myClassInstance = new MyClass();
myClassInstance.myStaticField;
> undefined
myClassInstance.myStaticMethod();
> Uncaught TypeError: myClassInstance.myStaticMethod is not a function
MyClass.myStaticField;
> true
MyClass.myStaticMethod();
> "A static method."
এগুলি প্রযুক্তিগতভাবে প্রয়োজন হয় না, তবে স্ট্যাটিক পদ্ধতি ব্যবহার করা একটি ক্লাসের উদাহরণগুলির সাথে কাজ করার জন্য ইউটিলিটি তৈরি করার জন্য সর্বোত্তম অনুশীলন। এর উদাহরণগুলির মধ্যে একটি ক্লাসের দৃষ্টান্তগুলি বাছাই করার জন্য নিবেদিত একটি স্ট্যাটিক পদ্ধতি বা একটি স্ট্যাটিক ফ্যাক্টরি পদ্ধতি অন্তর্ভুক্ত থাকতে পারে যা একটি ক্লাসের একটি উদাহরণ তৈরি করার জন্য প্রয়োজনীয় সেটআপ ধারণ করে এবং তারপরে ক্লাসের উদাহরণ প্রদান করে:
class User {
constructor( name, email ) {
this.name = name;
this.email = email;
}
static fromObject( myObject ) {
return new User( myObject.name, myObject.email ?? "Omitted" );
}
}
const userObject = {
"name" : "My Name",
"email" : "my@email.address"
};
const secondUserObject = {
"name" : "My Name"
};
const firstUser = User.fromObject( userObject );
const secondUser = User.fromObject( secondUserObject );
firstUser;
> Object { name: "My Name", email: "my@email.address" }
secondUser;
> Object { name: "My Name", email: "Omitted" }
আপনার উপলব্ধি পরীক্ষা করুন
নিচের কোন ধরনের ফিল্ডে শুধুমাত্র ক্লাসের ভিতর থেকে প্রবেশ করা যায়?
Static fields