জাভাস্ক্রিপ্টে আমার কোন অবজেক্ট তৈরি করা উচিত তা নিয়ে আমি বিভ্রান্ত হয়ে পড়ছি। মনে হয় কমপক্ষে দুটি উপায় রয়েছে। একটি হ'ল অবজেক্ট আক্ষরিক স্বরলিপি ব্যবহার করা হয় অন্যটি নির্মাণকাজগুলি ব্যবহার করে। একে অপরের ওপরে কি সুবিধা আছে?
জাভাস্ক্রিপ্টে আমার কোন অবজেক্ট তৈরি করা উচিত তা নিয়ে আমি বিভ্রান্ত হয়ে পড়ছি। মনে হয় কমপক্ষে দুটি উপায় রয়েছে। একটি হ'ল অবজেক্ট আক্ষরিক স্বরলিপি ব্যবহার করা হয় অন্যটি নির্মাণকাজগুলি ব্যবহার করে। একে অপরের ওপরে কি সুবিধা আছে?
উত্তর:
যদি আপনার কোনও অবজেক্টের সাথে সম্পর্কিত আচরণ না হয় (অর্থাত্ যদি বস্তুটি কেবলমাত্র ডেটা / স্টেটের জন্য ধারক হয়), তবে আমি একটি বস্তুকে আক্ষরিক ব্যবহার করব।
var data = {
foo: 42,
bar: 43
};
KISS নীতি প্রয়োগ করুন । আপনার যদি কোনও সাধারণ ধারকের উপাত্তের বাইরে কিছু না প্রয়োজন হয় তবে সাধারণ আক্ষরিক সাথে যান।
আপনি যদি নিজের অবজেক্টের সাথে আচরণ যুক্ত করতে চান তবে আপনি কনস্ট্রাক্টরের সাথে যেতে পারেন এবং নির্মাণের সময় অবজেক্টটিতে পদ্ধতি যুক্ত করতে পারেন বা আপনার শ্রেণিকে একটি প্রোটোটাইপ দিতে পারেন।
function MyData(foo, bar) {
this.foo = foo;
this.bar = bar;
this.verify = function () {
return this.foo === this.bar;
};
}
// or:
MyData.prototype.verify = function () {
return this.foo === this.bar;
};
এর মতো শ্রেণিটিও আপনার ডেটা অবজেক্টের জন্য স্কিমার মতো কাজ করে: আপনার কাছে এখন কিছু ধরণের চুক্তি রয়েছে (কনস্ট্রাক্টরের মাধ্যমে) অবজেক্টটি কী কী বৈশিষ্ট্য শুরু করে / রাখে তা। একটি নিখরচায় আক্ষরিক কেবল একটি নিরাকার ডাটা blo
আপনার পাশাপাশি কোনও বহিরাগত verifyফাংশন থাকতে পারে যা একটি সরল পুরানো ডেটা অবজেক্টে কাজ করে:
var data = {
foo: 42,
bar: 43
};
function verify(data) {
return data.foo === data.bar;
}
তবে এটি এনক্যাপসুলেশনের ক্ষেত্রে অনুকূল নয়: আদর্শভাবে, সত্তার সাথে সম্পর্কিত সমস্ত ডেটা + আচরণ একসাথে থাকতে হবে।
this.fn = function ...কোনও কনস্ট্রাক্টরের মধ্যে পদ্ধতির ব্যবহার করেন তবে আপনার প্রতিটি বস্তুর উদাহরণগুলির নিজস্ব ফাংশনগুলির অনুলিপি থাকবে। প্রোটোটাইপ পদ্ধতির ব্যবহার করে আপনি প্রতিটি ফাংশন একবারে এবং একবারে সংযুক্ত করেন: প্রোটোটাইপাল উত্তরাধিকারের মাধ্যমে সেগুলি দৃষ্টান্তগুলির মাধ্যমে উত্তরাধিকার সূত্রে প্রাপ্ত হবে।
এটি আপনার মূল অবজেক্টের একাধিক উদাহরণ প্রয়োজন কিনা তা মূলত ফোটে; কনস্ট্রাক্টরের সাথে সংজ্ঞায়িত অবজেক্ট আপনাকে সেই অবজেক্টের একাধিক ইনস্ট্যান্স করতে দেয়। অবজেক্ট লিটারালগুলি মূলত ভেরিয়েবল / পদ্ধতিগুলির সাথে একক যা সমস্ত পাবলিক।
// define the objects:
var objLit = {
x: 0,
y: 0,
z: 0,
add: function () {
return this.x + this.y + this.z;
}
};
var ObjCon = function(_x, _y, _z) {
var x = _x; // private
var y = _y; // private
this.z = _z; // public
this.add = function () {
return x + y + this.z; // note x, y doesn't need this.
};
};
// use the objects:
objLit.x = 3;
objLit.y = 2;
objLit.z = 1;
console.log(objLit.add());
var objConIntance = new ObjCon(5,4,3); // instantiate an objCon
console.log(objConIntance.add());
console.log((new ObjCon(7,8,9)).add()); // another instance of objCon
console.log(objConIntance.add()); // same result, not affected by previous line
অভিন্ন উপায়ে অবজেক্ট তৈরির আর একটি উপায় হ'ল কোনও ফাংশন ব্যবহার করা যা কোনও বস্তুকে রিটার্ন দেয়:
function makeObject() {
var that = {
thisIsPublic: "a public variable"
thisIsAlsoPublic: function () {
alert(that.thisIsPublic);
}
};
var secret = "this is a private variable"
function secretFunction() { // private method
secret += "!"; // can manipulate private variables
that.thisIsPublic = "foo";
}
that.publicMethod = function () {
secret += "?"; // this method can also mess with private variables
}
that.anotherPublicVariable = "baz";
return that; // this is the object we've constructed
}
makeObject.static = "This can be used to add a static varaible/method";
var bar = makeObject();
bar.publicMethod(); // ok
alert(bar.thisIsPublic); // ok
bar.secretFunction(); // error!
bar.secret // error!
জাভাস্ক্রিপ্টের ফাংশনগুলি ক্লোজার হওয়ার কারণে আমরা ব্যক্তিগত ভেরিয়েবল এবং পদ্ধতিগুলি ব্যবহার করতে পারি এবং এড়াতে পারি new।
জাভাস্ক্রিপ্টে ব্যক্তিগত ভেরিয়েবলের জন্য http://javascript.crockford.com/private.html থেকে ।
নীচের কোডটিতে একটি অবজেক্ট তৈরির তিনটি পদ্ধতি, অবজেক্ট লিটারাল সিনট্যাক্স, একটি ফাংশন কনস্ট্রাক্টর এবং Object.create()। অবজেক্ট আক্ষরিক বাক্য গঠনটি কেবল ফ্লাইতে তৈরি করে এবং বস্তু তৈরি করে এবং __prototype__যেমন এটি Objectবস্তু এবং এটির সমস্ত বৈশিষ্ট্য এবং পদ্ধতিতে এটির অ্যাক্সেস থাকবে Object। কঠোরভাবে ডিজাইনের প্যাটার্ন দৃষ্টিকোণ থেকে একটি সাধারণ অবজেক্ট আক্ষরিক ব্যবহার করা উচিত ডেটাগুলির একক দৃষ্টান্ত সংরক্ষণ করার জন্য।
ফাংশন কনস্ট্রাক্টরের একটি বিশেষ সম্পত্তি রয়েছে .prototype। এই __prototype__বৈশিষ্ট্যটি ফাংশন কনস্ট্রাক্টর দ্বারা তৈরি যে কোনও অবজেক্টে পরিণত হবে । .prototypeকোনও ফাংশন কনস্ট্রাক্টরের সম্পত্তিতে যুক্ত সমস্ত বৈশিষ্ট্য এবং পদ্ধতিগুলি এটি তৈরির সমস্ত বস্তুর জন্য উপলব্ধ। আপনার যদি ডেটার একাধিক উদাহরণ প্রয়োজন হয় বা আপনার অবজেক্ট থেকে আচরণের প্রয়োজন হয় তবে একজন কনস্ট্রাক্টর ব্যবহার করা উচিত। নোট করুন ফাংশন কনস্ট্রাক্টর যখন আপনি একটি বেসরকারী / জনসাধারণের বিকাশ বিন্যাস অনুকরণ করতে চান তখন সর্বোত্তমভাবে ব্যবহৃত হয়। সমস্ত ভাগ করা পদ্ধতি স্থাপন করা মনে রাখবেন .prototypeযাতে প্রতিটি বস্তুর ক্ষেত্রে সেগুলি তৈরি না হয় w
অবজেক্টের তৈরি করা হচ্ছে Object.create()সদ্ব্যবহার হিসেবে একটি বস্তু আক্ষরিক __prototype__এই পদ্ধতি দ্বারা নির্মিত অবজেক্টের জন্য। আক্ষরিক বস্তুতে যুক্ত সমস্ত বৈশিষ্ট্য এবং পদ্ধতিগুলি সত্য প্রোটোটাইপাল উত্তরাধিকারের মাধ্যমে এটি থেকে তৈরি সমস্ত বস্তুর জন্য উপলব্ধ থাকবে। এটি আমার পছন্দের পদ্ধতি।
//Object Example
//Simple Object Literal
var mySimpleObj = {
prop1 : "value",
prop2 : "value"
}
// Function Constructor
function PersonObjConstr() {
var privateProp = "this is private";
this.firstname = "John";
this.lastname = "Doe";
}
PersonObjConstr.prototype.greetFullName = function() {
return "PersonObjConstr says: Hello " + this.firstname +
" " + this.lastname;
};
// Object Literal
var personObjLit = {
firstname : "John",
lastname: "Doe",
greetFullName : function() {
return "personObjLit says: Hello " + this.firstname +
", " + this.lastname;
}
}
var newVar = mySimpleObj.prop1;
var newName = new PersonObjConstr();
var newName2 = Object.create(personObjLit);
Object.createআক্ষরিক অভ্যন্তরে ফাংশনটি ব্যবহার করে কোনও বস্তু তৈরি করেন প্রতি উদাহরণে অনন্য হয়ে যাবে?
এটি আপনি কী করতে চান তার উপর নির্ভর করে। আপনি যদি নিজের (আধা) ব্যক্তিগত ভেরিয়েবল বা ফাংশনগুলি ব্যবহার করতে চান তবে কনস্ট্রাক্টর ফাংশনই এটি করার উপায়। যদি আপনার অবজেক্টটিতে কেবল বৈশিষ্ট্য এবং পদ্ধতি থাকে তবে একটি বস্তুর আক্ষরিক পক্ষে ভাল।
function SomeConstructor(){
var x = 5;
this.multiply5 = function(i){
return x*i;
}
}
var myObj = new SomeConstructor;
var SomeLiteral = {
multiply5: function(i){ return i*5; }
}
এখন পদ্ধতি multiply5মধ্যে myObjএবং SomeLiteralঠিক একই জিনিস করে। পার্থক্যটি হ'ল myObj একটি প্রাইভেট ভেরিয়েবল ব্যবহার করে। দ্বিতীয়টি কিছু ক্ষেত্রে কার্যকর হতে পারে। বেশিরভাগ সময় কোনও অবজেক্ট আক্ষরিক জেএস-অবজেক্ট তৈরির জন্য যথেষ্ট এবং একটি দুর্দান্ত এবং পরিষ্কার উপায়।
আপনি কি পৃষ্ঠার জন্য একক উদাহরণ চান - ল্যাটারাল।
আপনি কি কেবল ডিটিও অবজেক্টের মতো ডেটা স্থানান্তর করতে চান সহজ জিইটি সেট: - আক্ষরিক
আপনি কি পদ্ধতির আচরণ, একাধিক দৃষ্টান্ত সহ প্রকৃত অবজেক্ট তৈরি করতে চান - কনস্ট্রাক্টর ফাংশন, ওওপি নীতি অনুসরণ করুন, উত্তরাধিকার: - কনস্ট্রাক্টর ফাংশন।
নীচে ইউটিউব ভিডিওতে যা বিশদভাবে ব্যাখ্যা করেছে যা আক্ষরিক তা কী, নির্মাণকারীর কার্য কী এবং কীভাবে তারা একে অপরের থেকে পৃথক।
আক্ষরিক অবজেক্টের সাথে যান, এটি প্রাথমিক মূল্যবোধের প্রবর্তনের সাথে আরও কনসাইজ এবং প্রসারিত হয়।
Https://www.w3schools.com/js/js_object_definition.asp এ উল্লিখিত
একটি বস্তু আক্ষরিক ব্যবহার করে, আপনি উভয় সংজ্ঞায়িত এবং তৈরি , এক বস্তুর এক বিবৃতি।
এছাড়াও
অবজেক্ট আক্ষরিক শুধুমাত্র একটি একক বস্তু তৈরি। কখনও কখনও আমরা একটি অবজেক্ট টাইপ করতে চাই যা এক ধরণের বহু অবজেক্ট তৈরি করতে ব্যবহার করা যেতে পারে ।
অবজেক্ট () কনস্ট্রাক্টর ফাংশনটি কিছুটা ধীর এবং আরও ভার্জোজ। যেমন, জাভাস্ক্রিপ্টে নতুন অবজেক্ট তৈরির প্রস্তাবিত উপায় হ'ল আক্ষরিক স্বরলিপি ব্যবহার করা
আসলে, মিথথিংস, আমাদের অবজেক্ট লিটারালগুলিতে ব্যক্তিগত পদ্ধতি থাকতে পারে। নীচে কোড বিবেচনা করুন:
var myObject = {
publicMethod: function () {
privateMethod1();
privateMethod2();
function privateMethod1(){
console.log('i am privateMethod1');
}
function privateMethod2(){
console.log('i am privateMethod2');
}
}
}
স্বাদের বিষয়, তবে আমি যেখানে সম্ভব সেখানে অবজেক্ট লিটারাল ব্যবহার করতে পছন্দ করি।
// অবজেক্ট লিটারাল এবং অবজেক্ট কনস্ট্রাক্টর
function MyData(foo, bar) {
this.foo = foo;
this.bar = bar;
}
MyData.prototype.verify = function () {
return this.foo === this.bar;
};
//add property using prototype
var MD = new MyData;//true.
var MD = new MyData();//true.
MD.verify// return only the function structure.
MD.verify(); //return the verify value and in this case return true coz both value is null.
var MD1 = new MyData(1,2); // intialized the value at the starting.
MD1.verify// return only the function structure.
MD1.verify(); // return false coz both value are not same.
MD1.verify(3,3);// return false coz this will not check this value intialized at the top
MyData.prototype.verify = function (foo,bar) {
return this.foo === this.bar;
};
var MD1 = new MyData(1,2);
MD1.verify();
MD1.verify(3,3);// return false coz this keyword used with foo and bar that will check parent data