জাভাস্ক্রিপ্টে কোনও অবজেক্ট তৈরি করার জন্য কোন উপায়ে সেরা? কোনও বস্তুর সম্পত্তির পূর্বে `var` কি প্রয়োজনীয়?


177

এখনও পর্যন্ত আমি জাভাস্ক্রিপ্টে একটি অবজেক্ট তৈরির জন্য তিনটি উপায় দেখেছি। কোন উপায় কোনও বস্তু তৈরির জন্য সবচেয়ে ভাল এবং কেন?

আমি আরও দেখেছি যে এই সমস্ত উদাহরণে কীওয়ার্ড varকোনও সম্পত্তির আগে ব্যবহার করা হয় না - কেন? এটি কি ঘোষণা করার প্রয়োজন নেই?varকোনও সম্পত্তির নাম আগে যেমন উল্লেখ করা হয়েছিল যে বৈশিষ্ট্যগুলি ভেরিয়েবল?

দ্বিতীয় এবং তৃতীয় উপায়ে, অবজেক্টটির নাম আপার-কেস হয় এবং প্রথম উপায়ে অবজেক্টটির নাম লোয়ার-কেসে থাকে। কোন বস্তুর নামের জন্য আমাদের কোন মামলাটি ব্যবহার করা উচিত?

প্রথম উপায়:

function person(fname, lname, age, eyecolor){
  this.firstname = fname;
  this.lastname = lname;
  this.age = age;
  this.eyecolor = eyecolor;
}

myFather = new person("John", "Doe", 50, "blue");
document.write(myFather.firstname + " is " + myFather.age + " years old.");

দ্বিতীয় উপায়:

var Robot = {
  metal: "Titanium",
  killAllHumans: function(){
    alert("Exterminate!");
  }
};

Robot.killAllHumans();

তৃতীয় উপায় - অ্যারে সিনট্যাক্স ব্যবহার করে জাভাস্ক্রিপ্ট অবজেক্টগুলি:

var NewObject = {};

NewObject['property1'] = value;
NewObject['property2'] = value;
NewObject['method'] = function(){ /* function code here */ }

2
"var "টি ভেরিয়েবলের স্কোপের উপর নির্ভর করে ব্যবহৃত হয়, এটি গ্লোবালকে সংজ্ঞায়িত করে বা না, এটি অনুসন্ধান করুন এবং আপনি পার্থক্যটি দেখতে পাবেন।
jackJoe

80
আপনি যদি হোমসিডাল রোবট তৈরি করেন, সর্বদা ব্যবহার করুন var, দয়া করে .. বাদ না দিয়ে এগুলি বিশ্বব্যাপী করে তোলে
মাইখাল

9
"ভেরিয়েবলের স্কোপের উপর নির্ভর করে
ভেরি

1
পদ্ধতি সম্পর্কে কি: Object.create()?
সর্বাধিক

এটি চমৎকার হবে যদি "যেমন এটি উল্লেখ করেছে যে বৈশিষ্ট্যগুলি ভেরিয়েবলগুলি" স্পষ্ট করা হয়। এটা কে"? কোথায় উল্লেখ করা হয়েছে? আপনি একটি নির্দিষ্ট উদ্ধৃতি উদ্ধৃত করতে পারেন?
user4642212

উত্তর:


181

কোনও সেরা উপায় নেই, এটি আপনার ব্যবহারের ক্ষেত্রে নির্ভর করে।

  • আপনি বেশ কয়েকটি অনুরূপ অবজেক্ট তৈরি করতে চাইলে উপায় 1 ব্যবহার করুন । আপনার উদাহরণে, Person(আপনার বড় নামের সাথে নাম শুরু করা উচিত) কনস্ট্রাক্টর ফাংশন বলে । এটি ক্লাসগুলির অনুরূপ অন্যান্য ওও ভাষার
  • আপনার যদি কেবলমাত্র কোনও ধরণের একটি জিনিস (সিঙ্গলটনের মতো) প্রয়োজন হয় তবে উপায় 2 ব্যবহার করুন । আপনি যদি এই বস্তুটি অন্য কোনওটির উত্তরাধিকার সূত্রে চান তবে আপনাকে যদিও কনস্ট্রাক্টর ফাংশনটি ব্যবহার করতে হবে।
  • উপায় 3 ব্যবহার করুন যদি আপনি বস্তুর অন্যান্য বৈশিষ্ট্যগুলির উপর নির্ভর করে বৈশিষ্ট্যগুলি আরম্ভ করতে চান বা আপনার যদি গতিশীল সম্পত্তির নাম থাকে।

হালনাগাদ: তৃতীয় উপায় হিসাবে অনুরোধ উদাহরণ হিসাবে।

নির্ভরশীল বৈশিষ্ট্য:

নিম্নলিখিত হিসাবে কাজ করে না thisদেয় না পড়ুন book। আক্ষরিক বস্তুতে অন্যান্য বৈশিষ্ট্যের মান সহ কোনও সম্পত্তি শুরু করার কোনও উপায় নেই:

var book = {
    price: somePrice * discount,
    pages: 500,
    pricePerPage: this.price / this.pages
};

পরিবর্তে, আপনি করতে পারেন:

var book = {
    price: somePrice * discount,
    pages: 500
};
book.pricePerPage = book.price / book.pages;
// or book['pricePerPage'] = book.price / book.pages;

গতিশীল সম্পত্তির নাম:

যদি সম্পত্তিটির নামটি কিছু পরিবর্তনশীলে সঞ্চিত থাকে বা কিছু অভিব্যক্তির মাধ্যমে তৈরি করা হয়, তবে আপনাকে বন্ধনী স্বরলিপি ব্যবহার করতে হবে:

var name = 'propertyName';

// the property will be `name`, not `propertyName`
var obj = {
    name: 42
}; 

// same here
obj.name = 42;

// this works, it will set `propertyName`
obj[name] = 42;

1
আপনার উত্তরের জন্য ধন্যবাদ ... এখন আমি আপনার প্রথম পয়েন্টটি বুঝতে পেরেছি আমরা যদি এই মাইফাদার = নতুন ব্যক্তি ("জন", "ডো", 50, "নীল") কিছু চাই তবে আমরা ওয়ে 1 ব্যবহার করতে পারি; মাইমথার = নতুন ব্যক্তি ("চটকদার", "ডো", 45, "বাদামী"); মাই ব্রোথার = নতুন ব্যক্তি ("পোল", "ডো", 15, "নীল");
জামনা

আমি মনে করি আপনার অর্থ আপত্তি [নাম] = 42. ঠিক আছে?
কিথ পিনসন

আমি উল্লেখ করতে চাই যে 2 এবং 3 বিকল্পগুলি কার্যত অভিন্ন, আপনি কেবল বস্তুটি তৈরি করার পরে আপনি সম্পত্তি বরাদ্দ করছেন। একে একে আক্ষরিক স্বরলিপি বলা হয় , কারণ আপনি নিজের অবজেক্টটি তৈরি করতে কোনও অবজেক্টকে আক্ষরিক ব্যবহার করছেন । হুডের নীচে, এটি আসলে "নতুন অবজেক্ট ()" বলে। আপনি এটি সম্পর্কে এখানে আরও পড়তে পারেন: developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/…
দেদেওয়াদ

দ্বিতীয় কেসটির জন্য, যদি আমরা স্প্রেড অপারেটরটিকে ...অন্য কোনও বস্তুর উত্তরাধিকার সূত্রে ব্যবহার করি তবে তা কি বোঝা যাবে ?
প্যাকের ছাগলছানা

114

একটি ফাংশন সংজ্ঞায়িত করার বিভিন্ন উপায় আছে। এটি সম্পূর্ণরূপে আপনার প্রয়োজনের উপর ভিত্তি করে। নীচে কয়েকটি শৈলী দেওয়া হল:

  1. অবজেক্ট কনস্ট্রাক্টর
  2. আক্ষরিক নির্মাণকারী
  3. ফাংশন ভিত্তিক
  4. প্রোটোপ ভিত্তিক
  5. ফাংশন এবং প্রোটোটাইপ ভিত্তিক
  6. একক ভিত্তিক

উদাহরণ:

  1. অবজেক্ট কনস্ট্রাক্টর
var person = new Object();

person.name = "Anand",
person.getName = function(){
  return this.name ; 
};
  1. আক্ষরিক নির্মাণকারী
var person = { 
  name : "Anand",
  getName : function (){
   return this.name
  } 
} 
  1. ফাংশন কনস্ট্রাক্টর
function Person(name){
  this.name = name
  this.getName = function(){
    return this.name
  } 
} 
  1. প্রোটোটাইপ
function Person(){};

Person.prototype.name = "Anand";
  1. ফাংশন / প্রোটোটাইপ সংমিশ্রণ
function Person(name){
  this.name = name;
} 
Person.prototype.getName = function(){
  return this.name
} 
  1. একক বস্তু
var person = new function(){
  this.name = "Anand"
} 

আপনার যদি কোনও বিভ্রান্তি থাকে তবে আপনি কনসোলে এটি ব্যবহার করে দেখতে পারেন।


ওহে @ অ্যালেক্স_নাবু - আমি ইতিমধ্যে আমার পোস্টে উদাহরণগুলি ভাগ করে নিয়েছি। আপনি যদি এখনও কোনও চ্যালেঞ্জের মুখোমুখি হন তবে দয়া করে আমাকে আপডেট করুন আমি আপনাকে সহায়তা করব।
আনন্দ দীপ সিং

1
var personশেষ পর্যন্ত একই উদাহরণটি উপস্থাপন করে প্রতিটি উদাহরণ তৈরি করা কি আরও অর্থপূর্ণ হবে না ? উদাহরণস্বরূপ ফাংশন কনস্ট্রাক্টর আপনি কেবল যোগ করতে পারে var person = new Person("Anand")। এবং আপাতদৃষ্টিতে এলোমেলোভাবে আধা-কোলনের ব্যবহার কী হবে? : পি
ক্রেগোক্স

2
এটি প্রতিটি উপায়ে ও কৌশলগুলির মূল্য ব্যাখ্যা করার সাথে যুক্ত করে।
রেলাভলেস

10

কোনও অবজেক্ট তৈরির জন্য কোনও "সেরা উপায়" নেই। আপনার ব্যবহারের ক্ষেত্রে উপর নির্ভর করে প্রতিটি উপায়েই সুবিধা রয়েছে।

কনস্ট্রাক্টর প্যাটার্ন (এর সাথে যুক্ত একটি ফাংশন) new অপারেটরটির ) প্রোটোটাইপাল উত্তরাধিকার ব্যবহারের সম্ভাবনা সরবরাহ করে, অন্য উপায়গুলি না করে। সুতরাং আপনি যদি প্রোটোটাইপাল উত্তরাধিকার চান তবে কনস্ট্রাক্টর ফাংশন হ'ল উত্তম উপায়।

তবে, আপনি যদি প্রোটোটাইপাল উত্তরাধিকার চান তবে আপনি পাশাপাশি ব্যবহার করতে পারেন Object.createযা উত্তরাধিকারটিকে আরও সুস্পষ্ট করে তুলেছে।

আক্ষরিক কোনও বস্তু তৈরি (উদাহরণ var obj = {foo: "bar"};:) তৈরি করা দুর্দান্ত কাজ করে যদি আপনি সৃষ্টির সময় হাতে রাখতে চান এমন সমস্ত সম্পত্তি থাকে।

পরে বৈশিষ্ট্য নির্ধারণের জন্য, যদি আপনি সম্পত্তির নাম জানেন তবে NewObject.property1বাক্য গঠনটি সাধারণত পছন্দনীয় NewObject['property1']। তবে পরবর্তীকালে দরকারী যখন আপনার প্রকৃতপক্ষে সময়ের আগে (নাম NewObject[someStringVar]:) এর নাম না থাকে ।

আশাকরি এটা সাহায্য করবে!


6

আমার ধারণা এটি আপনি যা চান তার উপর নির্ভর করে। সাধারণ বস্তুগুলির জন্য, আমি অনুমান করি আপনি দ্বিতীয় পদ্ধতিটি ব্যবহার করতে পারেন। যখন আপনার অবজেক্টগুলি বড় হবে এবং আপনি একই ধরণের জিনিসগুলি ব্যবহার করার পরিকল্পনা করছেন, আমার ধারণা প্রথম পদ্ধতিটি আরও ভাল হবে। এইভাবে আপনি প্রোটোটাইপগুলি ব্যবহার করে এটি প্রসারিত করতে পারেন।

উদাহরণ:

function Circle(radius) {
    this.radius = radius;
}
Circle.prototype.getCircumference = function() {
    return Math.PI * 2 * this.radius;
};
Circle.prototype.getArea = function() {
    return Math.PI * this.radius * this.radius;
}

আমি তৃতীয় পদ্ধতি একটি বড় ফ্যান নই, কিন্তু এটা পরিবর্তনশীল সম্পাদনা বৈশিষ্ট্যের জন্য সত্যিই দরকারী, উদাহরণস্বরূপ var foo='bar'; var bar = someObject[foo];


3

জাভাস্ক্রিপ্টে আপনার অবজেক্ট তৈরির অনেকগুলি উপায় রয়েছে। কোনও বস্তু বা বস্তুর আক্ষরিক স্বরলিপি তৈরির জন্য একটি নির্মাণকারী ফাংশন ব্যবহার করে জাভাস্ক্রিপ্টে প্রচুর ব্যবহার করা হচ্ছে। এছাড়াও অবজেক্টের একটি উদাহরণ তৈরি করা এবং তারপরে এটিতে বৈশিষ্ট্য এবং পদ্ধতি যুক্ত করা, জাভাস্ক্রিপ্টে অবজেক্ট তৈরি করার জন্য তিনটি সাধারণ উপায় রয়েছে।

কনস্ট্রাক্টর ফাংশন

বিল্ট-ইন কনস্ট্রাক্টর ফাংশন রয়েছে যা আমরা সকলেই সময় সময় ব্যবহার করতে পারি যেমন তারিখ (), সংখ্যা (), বুলিয়ান () ইত্যাদি, সমস্ত নির্মাতা ফাংশন মূলধনী অক্ষরের সাথে শুরু হয়, এর মধ্যে আমরা জাভাস্ক্রিপ্টে কাস্টম কনস্ট্রাক্টর ফাংশন তৈরি করতে পারি এটার মত:

function Box (Width, Height, fill) {  
  this.width = Width;  // The width of the box 
  this.height = Height;  // The height of the box 
  this.fill = true;  // Is it filled or not?
}  

এবং আপনি এটির অনুরোধ করতে পারেন, কেবল নতুন () ব্যবহার করে নির্মাণকারীর নতুন উদাহরণ তৈরি করতে, নীচের মতো কিছু তৈরি করতে এবং ভরাট প্যারামিটার সহ কনস্ট্রাক্টর ফাংশনটি কল করতে পারেন:

var newBox = new Box(8, 12, true);  

আক্ষরিক বস্তু

অবজেক্ট লিটারাল ব্যবহার করে জাভাস্ক্রিপ্টে অবজেক্ট তৈরির ক্ষেত্রে এটি খুব ব্যবহৃত হয়, এটি একটি সাধারণ বিষয় তৈরির উদাহরণ, আপনি যতক্ষণ না তার সংজ্ঞা হিসাবে আপনার অবজেক্ট বৈশিষ্ট্যগুলিকে কিছু বরাদ্দ করতে পারেন:

var person = { 
    name: "Alireza",
    surname: "Dezfoolian"
    nose: 1,  
    feet: 2,  
    hands: 2,
    cash: null
};  

প্রোটোটাইপিং

একটি অবজেক্ট তৈরি করার পরে, আপনি এতে আরও সদস্য প্রোটোটাইপ করতে পারেন, উদাহরণস্বরূপ আমাদের বাক্সে রঙ যুক্ত করা, আমরা এটি করতে পারি:

Box.prototype.colour = 'red';

2

যদিও এখানে অনেক লোক বলেছেন যে অবজেক্ট তৈরির জন্য সর্বোত্তম উপায় নেই, সেখানে জাভাস্ক্রিপ্টে ১৯৯৯ সালের মতো কেন অবজেক্ট তৈরি করার অনেক উপায় রয়েছে তা নিয়ে যুক্তি রয়েছে এবং এটি বিভিন্ন পুনরাবৃত্তির উপর জাভাস্ক্রিপ্টের অগ্রগতির সাথে কী করতে হবে? ইকমাস্ক্রিপ্ট 1997 এর পূর্ববর্তী প্রকাশের।

ECMAScript 5 এর পূর্বে অবজেক্ট তৈরির মাত্র দুটি উপায় ছিল: কনস্ট্রাক্টর ফাংশন বা আক্ষরিক স্বরলিপি (নতুন অবজেক্টের আরও ভাল বিকল্প ())। কন্সট্রাক্টর ফাংশন স্বরলিপি দিয়ে আপনি এমন একটি বস্তু তৈরি করেন যা একাধিক উদাহরণে ইনস্ট্যান্ট করা যায় (নতুন কীওয়ার্ড সহ), যখন আক্ষরিক স্বরলিপি একটি একক বস্তু সরবরাহ করে, যেমন সিঙ্গলটনের মতো।

// constructor function
function Person() {};

// literal notation
var Person = {};

আপনি যে পদ্ধতি ব্যবহার করুন না কেন, জাভাস্ক্রিপ্ট অবজেক্টগুলি কেবল মূল মান জোড়ার বৈশিষ্ট্য:

// Method 1: dot notation
obj.firstName = 'Bob';

// Method 2: bracket notation. With bracket notation, you can use invalid characters for a javascript identifier.
obj['lastName'] = 'Smith';

// Method 3: Object.defineProperty
Object.defineProperty(obj, 'firstName', {
    value: 'Bob',
    writable: true,
    configurable: true,
    enumerable: false
})

// Method 4: Object.defineProperties
Object.defineProperties(obj, {
  firstName: {
    value: 'Bob',
    writable: true
  },
  lastName: {
    value: 'Smith',
    writable: false
  }
});

জাভাস্ক্রিপ্টের প্রথম সংস্করণগুলিতে, শ্রেণিভিত্তিক উত্তরাধিকারের নকল করার একমাত্র আসল উপায় ছিল কনস্ট্রাক্টর ফাংশন ব্যবহার করা। কনস্ট্রাক্টর ফাংশন একটি বিশেষ ফাংশন যা 'নতুন' কীওয়ার্ডের সাহায্যে আহবান করা হয়। কনভেনশন দ্বারা, ফাংশন সনাক্তকারীকে মূলধন দেওয়া হয়, তবে এটি প্রয়োজন হয় না। কনস্ট্রাক্টরের ভিতরে, আমরা কনস্ট্রাক্টর ফাংশনটি স্পষ্টভাবে তৈরি করছে এমন অবজেক্টটিতে বৈশিষ্ট্য যুক্ত করতে 'এই' কীওয়ার্ডটি উল্লেখ করি। কনস্ট্রাক্টর ফাংশন স্পষ্টভাবে জনবহুল বৈশিষ্ট্য সহ নতুন বস্তুকে কলিং ফাংশনটিতে স্পষ্টভাবে ফিরিয়ে দেয়, যদি না আপনি স্পষ্টরূপে রিটার্ন কীওয়ার্ডটি ব্যবহার করেন এবং অন্য কোনও কিছু না ফেরান।

function Person(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;

    this.sayName = function(){
        return "My name is " + this.firstName + " " + this.lastName;
    }
} 

var bob = new Person("Bob", "Smith");
bob instanceOf Person // true

SayName পদ্ধতিতে সমস্যা আছে। সাধারণত, অবজেক্ট-ওরিয়েন্টেড ক্লাস-ভিত্তিক প্রোগ্রামিং ভাষায়, আপনি অবজেক্ট তৈরি করতে কারখানা হিসাবে ক্লাস ব্যবহার করেন। প্রতিটি বস্তুর নিজস্ব ইন্সটেন্স ভেরিয়েবল থাকবে তবে ক্লাস ব্লুপ্রিন্টে সংজ্ঞায়িত পদ্ধতিগুলির কাছে এটির একটি পয়েন্টার থাকবে। দুর্ভাগ্যক্রমে, জাভাস্ক্রিপ্টের কনস্ট্রাক্টর ফাংশনটি ব্যবহার করার সময়, যতবারই এটি ডাকা হয়, এটি নতুন নির্মিত বস্তুর উপর একটি নতুন sayName সম্পত্তি সংজ্ঞায়িত করবে। সুতরাং প্রতিটি বস্তুর নিজস্ব অনন্য sayName সম্পত্তি থাকবে। এটি আরও মেমরির সংস্থান গ্রহণ করবে।

বর্ধিত মেমরি রিসোর্সগুলির পাশাপাশি, কনস্ট্রাক্টর ফাংশনের অভ্যন্তরের সংজ্ঞাগুলি উত্তরাধিকারের সম্ভাবনাটিকে সরিয়ে দেয়। আবার, পদ্ধতিটি সদ্য নির্মিত বস্তুর উপর সম্পত্তি হিসাবে সংজ্ঞায়িত করা হবে এবং অন্য কোনও বস্তু নেই, সুতরাং উত্তরাধিকার মতো কাজ করতে পারে না। সুতরাং, জাভাস্ক্রিপ্টটি উত্তরাধিকারের ফর্ম হিসাবে প্রোটোটাইপ শৃঙ্খলা সরবরাহ করে, জাভাস্ক্রিপ্টকে একটি প্রোটোটাইপাল ভাষা বানায়।

যদি আপনার পিতামাতা এবং পিতামাতারা কোনও সন্তানের অনেক সম্পত্তি ভাগ করে নেন তবে সন্তানের উচিত সেই সমস্ত সম্পত্তি inherit ES5 এর পূর্বে, এটি নিম্নরূপে সম্পন্ন হয়েছিল:

function Parent(eyeColor, hairColor) {
    this.eyeColor = eyeColor;
    this.hairColor = hairColor;
}

Parent.prototype.getEyeColor = function() {
  console.log('has ' + this.eyeColor);
}

Parent.prototype.getHairColor = function() {
  console.log('has ' + this.hairColor);
}

function Child(firstName, lastName) {
  Parent.call(this, arguments[2], arguments[3]);
  this.firstName = firstName;
  this.lastName = lastName;
}

Child.prototype = Parent.prototype;

var child = new Child('Bob', 'Smith', 'blue', 'blonde');
child.getEyeColor(); // has blue eyes
child.getHairColor(); // has blonde hair

উপরের প্রোটোটাইপ চেইনটি আমরা যেভাবে ব্যবহার করেছি তাতে একটি গ্লাস রয়েছে। প্রোটোটাইপ হ'ল একটি সরাসরি লিঙ্ক, প্রোটোটাইপ শৃঙ্খলে একটি বস্তুর সম্পত্তি পরিবর্তন করে, আপনি অন্য কোনও অবজেক্টের একই সম্পত্তিও পরিবর্তন করবেন। স্পষ্টতই, কোনও সন্তানের উত্তরাধিকার সূত্রে প্রাপ্ত পদ্ধতিটি পরিবর্তনের ফলে পিতামাতার পদ্ধতি পরিবর্তন করা উচিত নয়। Object.create একটি পলিফিল ব্যবহার করে এই সমস্যাটি সমাধান করেছে। সুতরাং, অবজেক্ট.ক্রিয়েট দিয়ে, আপনি প্রোটোটাইপ শৃঙ্খলে পিতামাতার একই সম্পত্তি প্রভাবিত না করে প্রোটোটাইপ শৃঙ্খলে কোনও সন্তানের সম্পত্তিটি নিরাপদে পরিবর্তন করতে পারবেন।

ECMAScript 5 অবজেক্ট তৈরির জন্য কনস্ট্রাক্টর ফাংশনে উল্লিখিত বাগটি সমাধান করার জন্য অবজেক্ট.ক্রেট চালু করেছে। অবজেক্ট.ক্রিয়েট () পদ্ধতিটি একটি বিদ্যমান অবজেক্টকে সদ্য নির্মিত বস্তুর প্রোটোটাইপ হিসাবে ব্যবহার করে একটি নতুন অবজেক্ট তৈরি করে। যেহেতু একটি নতুন অবজেক্ট তৈরি করা হয়েছে, আপনার আর সমস্যা নেই যেখানে প্রোটোটাইপ শৃঙ্খলেতে শিশু সম্পত্তি পরিবর্তন করে শৃঙ্খলে থাকা সেই সম্পত্তিটির জন্য পিতামাতার রেফারেন্সটি সংশোধন করা হবে।

var bobSmith = {
    firstName: "Bob",
    lastName: "Smith",
    sayName: function(){
      return "My name is " + this.firstName + " " + this.lastName;
    }
}

var janeSmith = Object.create(bobSmith, {
    firstName : {  value: "Jane" }
})

console.log(bobSmith.sayName()); // My name is Bob Smith
console.log(janeSmith.sayName()); // My name is Jane Smith
janeSmith.__proto__ == bobSmith; // true
janeSmith instanceof bobSmith; // Uncaught TypeError: Right-hand side of 'instanceof' is not callable. Error occurs because bobSmith is not a constructor function.

ES6 এর আগে এখানে ফাংশন কনস্ট্রাক্টর এবং অবজেক্ট.ক্রিয়েটকে ব্যবহার করার জন্য একটি সাধারণ ক্রিয়েশনাল প্যাটার্ন ছিল:

const View = function(element){
  this.element = element;
}

View.prototype = {
  getElement: function(){
    this.element
  }
}

const SubView = function(element){
  View.call(this, element);
}

SubView.prototype = Object.create(View.prototype);

এখন অবজেক্ট.ক্রিয়েট মিলিয়ে কনস্ট্রাক্টর ফাংশন জাভাস্ক্রিপ্টে অবজেক্ট তৈরি এবং উত্তরাধিকারের জন্য ব্যাপকভাবে ব্যবহৃত হয়েছে। তবে, ES6 ক্লাসগুলির ধারণাটি প্রবর্তন করেছে, যা জাভাস্ক্রিপ্টের বিদ্যমান প্রোটোটাইপ-ভিত্তিক উত্তরাধিকারের তুলনায় মূলত সিনট্যাকটিকাল চিনি। ক্লাস সিনট্যাক্স জাভাস্ক্রিপ্টে নতুন অবজেক্ট-ভিত্তিক উত্তরাধিকারের মডেল প্রবর্তন করে না। সুতরাং, জাভাস্ক্রিপ্ট একটি প্রোটোটাইপাল ভাষা থেকে যায়।

ES6 ক্লাস উত্তরাধিকার অনেক সহজ করে তোলে। আমাদের আর ম্যানুয়ালি প্যারেন্ট ক্লাসের প্রোটোটাইপ ফাংশনগুলি অনুলিপি করতে হবে না এবং শিশু শ্রেণির নির্মাতাটিকে পুনরায় সেট করতে হবে।

// create parent class
class Person {
  constructor (name) {
    this.name = name;
  }
}

// create child class and extend our parent class
class Boy extends Person {
  constructor (name, color) {
    // invoke our parent constructor function passing in any required parameters
    super(name);

    this.favoriteColor = color;
  }
}

const boy = new Boy('bob', 'blue')
boy.favoriteColor; // blue

সব মিলিয়ে জাভাস্ক্রিপ্টে অবজেক্ট ক্রিয়েশনের এই 5 টি ভিন্ন কৌশল ইকমাস্ক্রিপ্ট স্ট্যান্ডার্ডের বিবর্তনের সাথে মিলেছে।


0

অবশ্যই একটি সর্বোত্তম উপায় আছে j জাভাস্ক্রিপ্টে অবজেক্টগুলিতে রয়েছে অগণিত এবং অকেumeণযোগ্য বৈশিষ্ট্য।

var empty = {};
console.log(empty.toString);
// . function toString(){...}
console.log(empty.toString());
// . [object Object]

উপরের উদাহরণে আপনি দেখতে পারেন যে একটি খালি বস্তুর আসলে বৈশিষ্ট্য রয়েছে।

ঠিক আছে প্রথমে দেখা যাক সবচেয়ে ভাল উপায়:

var new_object = Object.create(null)

new_object.name = 'Roland'
new_object.last_name = 'Doda'
//etc

console.log("toString" in new_object) //=> false

উপরের উদাহরণে লগটি মিথ্যা আউটপুট দেবে।

এখন দেখা যাক কেন অন্যান্য অবজেক্ট তৈরির উপায়গুলি ভুল।

//Object constructor
var object = new Object();

console.log("toString" in object); //=> true

//Literal constructor
var person = { 
  name : "Anand",
  getName : function (){
   return this.name
  } 
} 

console.log("toString" in person); //=> true

//function Constructor
function Person(name){
  this.name = name
  this.getName = function(){
    return this.name
  } 
}

var person = new Person ('landi')

console.log("toString" in person); //=> true

//Prototype
function Person(){};

Person.prototype.name = "Anand";

console.log("toString" in person); //=> true

//Function/Prototype combination
function Person2(name){
  this.name = name;
} 

Person2.prototype.getName = function(){
  return this.name
}

var person2 = new Person2('Roland')

console.log("toString" in person2) //=> true

আপনি উপরে যেমন দেখতে পাচ্ছেন, সমস্ত উদাহরণ সত্যই লগ হয় W যার অর্থ যদি আপনার যদি কোনও কেস থাকে যে কোনও জিনিসটির for inকোনও সম্পত্তি রয়েছে তা আপনাকে ভুল ফলাফলের দিকে নিয়ে যাবে কিনা তা দেখতে একটি লুপ রয়েছে।

মনে রাখবেন যে সবচেয়ে সহজ উপায় এটি সহজ নয় You আপনাকে লাইন দ্বারা অবজেক্ট লাইনের সমস্ত বৈশিষ্ট্য নির্ধারণ করতে হবে other অন্য উপায়গুলি আরও সহজ এবং কোনও অবজেক্ট তৈরির জন্য কম কোড থাকবে তবে আপনাকে কিছু ক্ষেত্রে সচেতন হতে হবে। আমি সর্বদা উপায় দ্বারা "অন্যান্য উপায়" ব্যবহার করি এবং যদি আপনি সর্বোত্তম উপায়টি ব্যবহার না করেন তবে উপরের সতর্কতার একটি সমাধান হ'ল:

 for (var property in new_object) {
  if (new_object.hasOwnProperty(property)) {
    // ... this is an own property
  }
 }

0

মূলত অবজেক্ট তৈরির 3 টি উপায় রয়েছে-

সবচেয়ে সহজ একটি অবজেক্ট ল্যাটারাল ব্যবহার করছে ।

const myObject = {}

যদিও এই পদ্ধতিটি সহজতম তবে এর অসুবিধাও রয়েছে অর্থাত্ যদি আপনার বস্তুর আচরণ থাকে (এতে ফাংশনগুলি) থাকে তবে ভবিষ্যতে আপনি যদি কোনও পরিবর্তন করতে চান তবে আপনাকে সমস্ত বস্তুতে এটি পরিবর্তন করতে হবে

সুতরাং সেক্ষেত্রে কারখানা বা কনস্ট্রাক্টর ফাংশন ব্যবহার করা ভাল better (আপনার পছন্দের যে কেউ)

কারখানা ফাংশনগুলি হ'ল সেই ফাংশন যা কোনও বস্তু ফিরে দেয় return

function factoryFunc(exampleValue){
   return{
      exampleProperty: exampleValue 
   }
}

কনস্ট্রাক্টর ফাংশনগুলি হ'ল সেই ফাংশন যা "এই" কীওয়ার্ড.ইগ-

function constructorFunc(exampleValue){
   this.exampleProperty= exampleValue;
}
const myObj= new constructorFunc(1);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.