Знаете ли вы, что массивы, null и т. д. являются объектами. Но это также разные типы данных. У каждого объекта есть прототип, по которому компилятор JavaScript узнает, какие свойства они наследуют.
Если вы понимаете хинди, то можете посмотреть 👇 видео
🤥Что такое прототип?
Просто зайдите в консоль браузера и напишите следующую команду:
const obj = { name: 'Taran' } console.log(obj);
Большинство из вас знали бы, что будет на выходе. Но большинство из вас также упустили нечто важное, а именно Prototype.
Вы можете увидеть [[Prototype]]. Что это?
Прототип объекта дает ему унаследованные свойства, такие как toString, valueOf и т. д.
🏵️Как получить прототип объекта?
Но как добавить дополнительные свойства к существующим свойствам объекта.
const obj = { name: 'Taran' } // getPrototypeOf will return the prototype of the object. Object.getPrototypeOf(obj).show = 'Taran' console.log(obj);
🙋♂️Можем ли мы сделать собственное свойство в этом прототипе?
Да, конечно, вы можете. Но как?
const obj = { name: 'Taran' } console.log(obj); // This 👇 will add a new property to your all object's prototype. Object.prototype.show = 'Taran'
Как видите, мы получили новое свойство в объекте.
Но что, если я хочу изменить прототип одного объекта.
мы можем сделать это с
const obj = { name: 'Taran', /* 👇 We are changing the full prototype which means all the propertie of an object will be replaced by the following. */ __proto__: { show: 'Hi', } } console.log(obj);
Кстати, 🤔Что такое цепочка прототипов?
Как мы видели, как мы можем добавить новое свойство в прототип объектов. Теперь мы увидим, как мы можем наследовать объект в качестве нашего прототипа.
Теперь вы можете создать такую цепочку наследования прототипов.
const obj = {
name: 'Taran'
}
const obj_2 = {
__proto__ : obj
}
// or
const objobj.name
sim = {
}
Object.setPrototypeOf(obj_2, obj)
console.log(obj2)
Как видите, прототип obj1 наследуется прототипом obj2.
Я также хочу показать вам кое-что особенное.
const obj = { name: 'Taran' } const obj_2 = { __proto__ : obj, getName() { return this.name // Taran } } obj_2.getName()
Но что происходит, когда у нас есть одно свойство в двух прототипах, которые унаследованы от одного объекта? Что ?
Эй!!, почему он выдал «Вивек» в качестве вывода, хотя прототип obj_2 имеет имя «Таран»
Это связано с тем, что каждый раз, когда мы что-то возвращаем, компилятор сначала проверяет, имеет ли самый верхний объект, который в нашем случае является obj_2, свойство имени not. Если это так, то он возвращает его, иначе он проверяет прототип объекта.
Простыми словами, это цепь. Цепочка начинается от самого верхнего объекта к нижнему объекту.
Если вы не в состоянии понять это так глубоко, подумайте о том, чтобы набраться терпения и оставить это на данный момент. Вы всегда можете выучить его снова.
🔪Что такое деструктуризация?
const person = { name: 'Taran', age: 16, married: false } const {name, age} = person console.log(name, age); // Taran, 16 // Ojbect destructuring with alias const {name: firstName, age: years} = person console.log(firstName, years); // Taran, 16
🍌Функция распространения
const obj = { name: 'Mayank', wife: 'Dhruvi' } const obj2 = { obj: obj, child: 'xyz' } console.log(obj2); // { obj: { name: 'Mayank', wife: 'Dhruvi'}, child: 'xyz' }
👆 Что делать, если вы хотите объединить 2 разных объекта вместе. Как мы это делаем?
Мы делаем это с помощью функции «…».
const obj = { name: 'Mayank', wife: 'Dhruvi' } const obj2 = { ...obj, child: 'xyz' } console.log(obj2); // { name: 'Mayank', wife: 'Dhruvi', child: 'xyz' }
🔗Дополнительная цепочка
Прежде чем понять необязательную цепочку. Нам нужно понять цепочку.
пример цепочки
const obj = {name: 'Taran'} console.log(obj.name) // Taran
но что, если obj.name
не определено.
Вы получите ошибку, если не определили свойство, но хотите его получить.
🤔Какое решение для этого?
const obj = {} // 👇 `?` will ensure that you don't get error if name property doesn't exists. console.log(obj?.name) // undefined
🛑Примечание: вы получите неопределенность, если попытаетесь написать obj.name
, даже если вы не упомянули какое-либо свойство «имя» в объекте. Но когда вы будете делать большие проекты. Там очень пригодится.
Если у вас есть какие-либо вопросы по какой-либо теме в javascript: не стесняйтесь спрашивать здесь 👇
https://discord.com/channels/978950292357914695/1050646101126041661