new Object() नोटेशन और ऑब्जेक्ट लिटरल {} नोटेशन दोनों वही काम करते हैं। वे एक ऑब्जेक्ट इनिशियलाइज़ करते हैं। हालांकि, यदि आप प्रॉपर्टीज जोड़ना शुरू करते हैं तो दूसरी नोटेशन थोड़ी अलग हो सकती है।
उदाहरण
let a = {
name: 'Ayush'
};
यह इनिशियलाइज़ेशन इसके समतुल्य है:
let a = new Object();
a.name = 'Ayush'
या
let a = {}
a.name = 'Ayush'
हालांकि, इनहेरिटेड क्लासेस के मामले में ऐसा नहीं है। इन क्लासेस के कस्टम कंस्ट्रक्टर्स होते हैं और new ClassName() इनवोकेशन्स को ऊपर दिए गए फ्लो से अलग काम करने के लिए मॉडिफाई कर सकते हैं। यह पूरी तरह प्रोग्रामर के विवेक पर निर्भर करता है।
विस्तृत तुलना
| पहलू | Object Literal {} | new Object() |
|---|---|---|
| सिंटैक्स | संक्षिप्त, पठनीय | वर्बोज़ |
| प्रदर्शन | थोड़ा तेज़ | फंक्शन कॉल ओवरहेड |
| प्रॉपर्टीज इनिशियलाइज़ेशन | इनलाइन | अलग स्टेटमेंट्स |
| प्रोटोटाइप | Object.prototype | Object.prototype |
कंस्ट्रक्टर फंक्शन पैटर्न
// कंस्ट्रक्टर फंक्शन
function Person(name, age) {
this.name = name;
this.age = age;
}
const person1 = new Person('John', 30);
// ES6 क्लास (सिंटैक्टिक शुगर)
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const person2 = new Person('Jane', 25);
Object.create() - प्रोटोटाइपल इनहेरिटेंस
const proto = {
greet() { console.log(`Hello, I'm ${this.name}`); }
};
const person = Object.create(proto);
person.name = 'John';
person.greet(); // "Hello, I'm John"
सिफारिश: सिंपल ऑब्जेक्ट्स के लिए लिटरल सिंटैक्स {} उपयोग करें। क्लासेस/कंस्ट्रक्टर्स जब आपको एक ही स्ट्रक्चर के मल्टीपल इंस्टेंसेस बनाने हों।