ES6 জাভাস্ক্রিপ্টে "ক্লাস" ধারণা চালু করেছে, যা অন্যান্য প্রোগ্রামিং ভাষার ক্লাস থেকে আলাদা। এখানে, ক্লাসগুলি হল বিশেষ ফাংশন যা ইতিমধ্যেই ডেটা, সেই ডেটার সাথে সম্পর্কিত বৈশিষ্ট্য এবং সেই ডেটা ম্যানিপুলেশন সম্পর্কিত পদ্ধতি ধারণ করে এমন বস্তু তৈরি করার জন্য টেমপ্লেট হিসাবে কাজ করে। এই বস্তু, বৈশিষ্ট্য এবং পদ্ধতিগুলিকে সম্মিলিতভাবে ক্লাসের "সদস্য" বলা হয়।
একটি ক্লাস সংজ্ঞায়িত করতে, class
কীওয়ার্ড ব্যবহার করুন। সর্বোত্তম অনুশীলন এবং জাভাস্ক্রিপ্টের অন্তর্নির্মিত কনস্ট্রাক্টর ফাংশন দ্বারা প্রতিষ্ঠিত কনভেনশন অনুসরণ করে, একটি বড় অক্ষর দিয়ে একটি শ্রেণির যেকোনো শনাক্তকারী শুরু করুন:
class MyClass {}
প্রোটোটাইপ এবং কনস্ট্রাক্টর ফাংশনগুলির উন্নত বৈশিষ্ট্যগুলির সাথে কাজ করার জন্য আরও অ্যাক্সেসযোগ্য উপায় প্রদান করার উদ্দেশ্যে ক্লাসগুলি:
class MyClass {}
typeof MyClass;
> "function"
যেহেতু উন্নত জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলির সাথে কাজ করা সহজ এবং আরও আকর্ষণীয় করার জন্য ক্লাসগুলি আংশিকভাবে যুক্ত করা হয়েছিল, সেগুলিকে কখনও কখনও "সিনট্যাটিক সুগার" হিসাবে উল্লেখ করা হয়৷ যাইহোক, ক্লাসগুলি প্রোটোটাইপল উত্তরাধিকারের সাথে কাজ করার জন্য দরকারী শর্টহ্যান্ড সরবরাহ করার চেয়ে আরও বেশি কিছু করে। ক্লাস সিনট্যাক্স প্রবর্তন করা জাভাস্ক্রিপ্টে দীর্ঘস্থায়ী নকশা সমস্যাগুলিকে পিছনের দিকে সামঞ্জস্যের সমস্যাগুলি প্রবর্তন না করেই সমাধান করার সুযোগ তৈরি করেছে৷ একটি উদাহরণ হিসাবে, একটি ক্লাসের মূল অংশের সমস্ত কোড সর্বদা কঠোর মোডে মূল্যায়ন করা হয়।
একটি ক্লাসের একটি উদাহরণ তৈরি করতে, new
অপারেটর ব্যবহার করুন।
class MyClass {}
const myClassInstance = new MyClass();
myClassInstance;
> Object { }
একটি ক্লাসের শরীরের ভিতরে সংজ্ঞায়িত ফাংশনগুলি সেই শ্রেণীর প্রতিটি উদাহরণের পদ্ধতি হিসাবে উন্মুক্ত করা হয়।
class MyClass {
classMethod() {
console.log( "My class method." );
}
}
const myClassInstance = new MyClass();
myClassInstance.classMethod();
> "My class method."
একটি ক্লাসের মধ্যে সংজ্ঞায়িত একটি পদ্ধতি ফলাফলের উদাহরণের প্রোটোটাইপের একটি পদ্ধতিতে পরিণত হয়। প্রোটোটাইপ চেইনের প্রকৃতির কারণে, আপনি এই পদ্ধতিগুলিকে সরাসরি ফলাফলের বস্তুতে কল করতে পারেন:
class MyClass {
classMethod() {
console.log( "My class method." );
}
}
const myClassInstance = new MyClass( "A string." );
myClassInstance;
> Object { }
<prototype>: Object { … }
classMethod: function classMethod()
constructor: class MyClass { constructor(myPassedValue) }
<prototype>: Object { … }
myClassInstance.classMethod();
> "My class method."
একটি ক্লাসের একটি দৃষ্টান্ত তৈরি করার জন্য একটি বিশেষ constructor()
পদ্ধতি বলা হয় যা নতুন-নির্মিত উদাহরণের জন্য প্রয়োজনীয় "সেটআপ" সম্পাদন করে এবং এর সাথে সম্পর্কিত যেকোন বৈশিষ্ট্য শুরু করে। উদাহরণ তৈরি করার সময় ক্লাসে পাস করা যেকোনো আর্গুমেন্ট constructor()
পদ্ধতিতে উপলব্ধ:
class MyClass {
constructor( myPassedValue ) {
console.log( myPassedValue );
}
}
const myClassInstance = new MyClass( "A string." );
> "A string."
একটি শ্রেণীর মূল অংশের মধ্যে, this
মানটি নিজেই দৃষ্টান্তকে বোঝায়, this
সংজ্ঞায়িত যে কোনও বৈশিষ্ট্য সেই শ্রেণীর প্রতিটি উদাহরণের বৈশিষ্ট্য হিসাবে প্রকাশ করা হয়:
class MyClass {
constructor( myPassedValue ) {
this.instanceProperty = myPassedValue;
}
}
const myClassInstance = new MyClass( "A string." );
myClassInstance;
> Object { instanceProperty: "A string." }
এই বৈশিষ্ট্যগুলি ক্লাসের শরীরের মধ্যে সমস্ত পদ্ধতিতেও উপলব্ধ:
class MyClass {
constructor( myPassedValue ) {
this.instanceProp = myPassedValue;
}
myMethod() {
console.log( this.instanceProp );
}
}
const myClassInstance = new MyClass( "A string." );
myClassInstance.myMethod();
> "A string."
আপনি যদি আপনার ক্লাসের জন্য constructor()
সংজ্ঞায়িত না করেন, জাভাস্ক্রিপ্ট ইঞ্জিন একটি খালি "ডিফল্ট" constructor
ধরে নেয়। প্রতিটি ক্লাসে শুধুমাত্র একটি বিশেষ পদ্ধতি থাকতে পারে যার নাম constructor()
:
class MyClass {
constructor() {}
constructor() {}
}
> Uncaught SyntaxError: A class may only have one constructor
আপনি একটি শ্রেণী ঘোষণা বা একটি শ্রেণীর অভিব্যক্তি ব্যবহার করে একটি শ্রেণী সংজ্ঞায়িত করতে পারেন। পূর্ববর্তী উদাহরণগুলি সমস্ত শ্রেণী ঘোষণা, যার জন্য new
ব্যবহার করে নাম আহ্বান করা প্রয়োজন। একটি "বেনামী" শ্রেণী তৈরি করতে ক্লাস এক্সপ্রেশন নামকরণ করা যেতে পারে বা নাম ছাড়াই ছেড়ে দেওয়া যেতে পারে।
let ClassExpression = class {
constructor() {}
};
ClassExpression;
> class {}
একটি জিনিসের জন্য আপনি বেনামী ক্লাস এক্সপ্রেশন ব্যবহার করতে পারেন তা হল ফাংশন যা "ফ্লাইতে:" ক্লাস তৈরি করে
function classMaker() {
return class {
constructor() {}
};
}
let MyVariable = classMaker();
MyVariable;
> class {}
একটি শ্রেণী ঘোষণা ব্যবহার করে একটি ক্লাস পুনরায় ঘোষণা করা একটি সিনট্যাক্স ত্রুটি সৃষ্টি করে:
class MyClass {
constructor( ) {
console.log( "My class." );
}
};
class MyClass {
constructor() {
console.log( "My new class." );
}
};
> Uncaught SyntaxError: redeclaration of class MyClass
যাইহোক, ক্লাস এক্সপ্রেশন আপনাকে একটি ক্লাস পুনরায় সংজ্ঞায়িত করতে দেয়:
let ClassExpression = class MyClass { };
ClassExpression = class MyOtherClass {
constructor( myString ) {
this.myProp = myString;
}
};
new ClassExpression( "String." );
> MyOtherClass {myProp: 'String.'}
আপনি যেভাবে ক্লাস ঘোষণা করতে পারেন সেভাবে আপনি নামের দ্বারা একটি নামযুক্ত শ্রেণী অভিব্যক্তি আহ্বান করতে পারবেন না। যাইহোক, একটি ক্লাস এক্সপ্রেশনের নির্ধারিত নাম তৈরি করা উদাহরণের একটি সম্পত্তি হিসাবে উপলব্ধ, বেশিরভাগ ডিবাগিং সহজ করার জন্য:
let MyVariable = class MyClass {};
MyClass;
> Uncaught ReferenceError: MyClass is not defined
MyVariable;
> class MyClass {}
MyVariable.name;
> "MyClass"
যখন আপনি একটি ক্লাস এক্সপ্রেশন ব্যবহার করে একটি ভেরিয়েবল শুরু করেন, তখন সেই ভেরিয়েবলের উত্তোলনের নিয়মগুলি প্রত্যাশিত হিসাবে অনুসরণ করা হয়। ক্লাস ঘোষণাগুলি let
এবং const
এর মতো একই "টেম্পোরাল ডেড জোন" নিয়মগুলি অনুসরণ করে, এবং এমন আচরণ করে যেন সেগুলি তাদের বর্তমান সুযোগের শীর্ষে উত্তোলন করা হয়নি, যার অর্থ ক্লাস ঘোষণার আগে একটি ক্লাস আহ্বান করা একটি ত্রুটি সৃষ্টি করে:
{
let myVar = new MyClass( "Property string." );
class MyClass {
myProp;
constructor( myString ) {
this.myProp = myString;
}
};
};
> Uncaught ReferenceError: Cannot access 'MyClass' before initialization
আপনার উপলব্ধি পরীক্ষা করুন
নিচের কোনটি সঠিকভাবে একটি শ্রেণিকে সংজ্ঞায়িত করে?
myClass = class {}
new class()
class MyClass {}
একটি ক্লাসে কয়টি constructor()
পদ্ধতি থাকতে পারে?