Знаете ли вы, что массивы, 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.namesim = {

}

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