"আমি ভেবে দেখেছি এটি প্রতিটি আপত্তিটিকে অন্যের উপর নির্ভরশীল করে তোলে"
কাইল যেমন ব্যাখ্যা করেছেন যখন দুটি বস্তু [[Prototype]]সংযুক্ত থাকে, তারা সত্যই একে অপরের উপর নির্ভর করে না; পরিবর্তে তারা পৃথক বস্তু হয়। আপনি একটি বস্তুর সাথে [[Prototype]]অন্যটির সাথে একটি লিঙ্কেজ যুক্ত করছেন যা আপনি যে কোনও সময় পরিবর্তন করতে পারেন। আপনি যদি ও ও [[Prototype]]এল ও ও স্টাইলের মাধ্যমে তৈরি দুটি সংযুক্ত বস্তু একে অপরের উপর নির্ভরশীল হিসাবে গ্রহণ করেন তবে আপনার constructorকলগুলির মাধ্যমে তৈরি হওয়া বিষয়গুলি সম্পর্কেও একই ধারণা করা উচিত ।
var foo= {},
bar= Object.create(foo),
baz= Object.create(bar);
console.log(Object.getPrototypeOf(foo)) //Object.prototype
console.log(Object.getPrototypeOf(bar)) //foo
console.log(Object.getPrototypeOf(baz)) //bar
এখন আপনি একটি সেকেন্ডের জন্য চিন্তা করুন foo barএবংbaz একে অপরের উপর নির্ভরশীল হিসাবে ?
এবার এই constructorস্টাইলের কোডটি একই করুন-
function Foo() {}
function Bar() {}
function Baz() {}
Bar.prototype= Object.create(Foo);
Baz.prototype= Object.create(Bar);
var foo= new Foo(),
bar= new Bar().
baz= new Baz();
console.log(Object.getPrototypeOf(foo)) //Foo.prototype
console.log(Object.getPrototypeOf(Foo.prototype)) //Object.prototype
console.log(Object.getPrototypeOf(bar)) //Bar.prototype
console.log(Object.getPrototypeOf(Bar.prototype)) //Foo.prototype
console.log(Object.getPrototypeOf(baz)) //Baz.prototype
console.log(Object.getPrototypeOf(Baz.prototype)) //Bar.prototype
শুধু পার্থক্য B / W আধুনিক ও সাবেক কোডটি আধুনিক একটিতে আছে
foo, bar, bazbbjects প্রতিটি-অপরকে তাদের স্বেচ্ছাচারী বস্তু মাধ্যমে সংযুক্ত থাকে constructorফাংশন ( Foo.prototype, Bar.prototype, Baz.prototype) কিন্তু সাবেক এক (মধ্যে OLOOশৈলী) তারা সরাসরি লিঙ্ক করা হয়। উভয় উপায় আপনি শুধু লিঙ্ক করছি foo, bar, bazএকে অপরের সাথে সরাসরি সাবেক এক এবং পরোক্ষভাবে আধুনিক এক। তবে, উভয় ক্ষেত্রেই বস্তুগুলি একে অপরের থেকে স্বাধীন কারণ এটি সত্যই কোনও শ্রেণীর উদাহরণের মতো নয় যা একবার তাত্ক্ষণিকভাবে চালিত হয়েছিল, অন্য কোনও শ্রেণীর কাছ থেকে উত্তরাধিকারী হতে পারে না। আপনি সর্বদা পরিবর্তন করতে পারেন কোন বস্তুর কোন প্রতিনিধিত্ব করা উচিত।
var anotherObj= {};
Object.setPrototypeOf(foo, anotherObj);
সুতরাং তারা সবাই একে অপরের থেকে স্বতন্ত্র।
"আমি আশা করছিলাম OLOOযে এই সমস্যাটি সমাধান করা হবে যেখানে প্রতিটি বস্তু অপরটি সম্পর্কে কিছুই জানে না।"
হ্যাঁ এটা সত্যিই সম্ভব-
Techইউটিলিটি অবজেক্ট হিসাবে ব্যবহার করা যাক-
var Tech= {
tag: "technology",
setName= function(name) {
this.name= name;
}
}
আপনি যতগুলি সংযুক্তি করতে চান তত বেশি বস্তু তৈরি করুন Tech-
var html= Object.create(Tech),
css= Object.create(Tech),
js= Object.create(Tech);
Some checking (avoiding console.log)-
html.isPrototypeOf(css); //false
html.isPrototypeOf(js); //false
css.isPrototypeOf(html); //false
css.isPrototypeOf(js); //false
js.isPrototypeOf(html); //false
js.isPrototypwOf(css); //false
Tech.isPrototypeOf(html); //true
Tech.isPrototypeOf(css); //true
Tech.isPrototypeOf(js); //true
আপনি কি মনে করেন html, css, jsবস্তু একে-অপরের সাথে সংযুক্ত করা হয়? না, তারা না। এখন আসুন আমরা constructorফাংশন- এর মাধ্যমে এটি কীভাবে করতে পারি তা দেখুন-
function Tech() { }
Tech.prototype.tag= "technology";
Tech.prototype.setName= function(name) {
this.name= name;
}
আপনি যতগুলি সংযুক্তি করতে চান তত বেশি বস্তু তৈরি করুন Tech.proptotype-
var html= new Tech(),
css= new Tech(),
js= new Tech();
কিছু পরীক্ষা করা হচ্ছে (কনসোল.লগ এড়ানো) -
html.isPrototypeOf(css); //false
html.isPrototypeOf(js); //false
css.isPrototypeOf(html); //false
css.isPrototypeOf(js); //false
js.isPrototypeOf(html); //false
js.isPrototypeOf(css); //false
Tech.prototype.isPrototypeOf(html); //true
Tech.prototype.isPrototypeOf(css); //true
Tech.prototype.isPrototypeOf(js); //true
এইসব মনে কেমন করে থাকে constructor-style অবজেক্টস ( html, css, js) অবজেক্টস থেকে পৃথক OLOO-style কোড? আসলে তারা একই উদ্দেশ্য পরিবেশন। ইন OLOO-style এক প্রতিনিধি বস্তু Tech(প্রতিনিধিদল স্পষ্টভাবে নির্ধারণ করা হয়েছে) যখন constructor-style এক প্রতিনিধি বস্তু Tech.prototype(প্রতিনিধিদল পরোক্ষভাবে হয়)। অবশেষে আপনি তিনটি অবজেক্টের সাথে একে অপরের সাথে কোনও সংযোগ না রেখে, একটি বস্তুর সাথে সরাসরি- OLOOস্টাইল ব্যবহার করে , অপ্রত্যক্ষভাবে constructorস্টাইল ব্যবহার করে লিঙ্কটি শেষ করবেন।
"যেমনটি, ওজেজেবি তৈরি করতে হবে ওবজা থেকে .. অবজেক্ট.ক্রিয়েট (ওবিজেবি) ইত্যাদি"
না, ObjBএখানে কোনও শ্রেণীর উদাহরণ (শাস্ত্রীয় ভিত্তিক ভাষাগুলির) মতো নয়
ObjA। এটি objBএমনভাবে বলা যেতে পারে যেমন ObjAতার তৈরির সময় অবজেক্টটিকে প্রতিনিধি হিসাবে তৈরি করা হয় " । আপনি যদি কনস্ট্রাক্টর ব্যবহার করেন তবে আপনি একই 'কাপলিং' করতেন, যদিও পরোক্ষভাবে .prototypeগুলি ব্যবহার করে of