На невзрачный предмет Любовь может подмигнуть
- Уильям Шекспир.

Значения, оставляющие числа, строки, логические значения, null и undefined, являются объектами. Числа, строки и логические значения подобны объектам в том смысле, что у них есть методы, но они неизменны. Объекты в javascript представляют собой коллекции с изменяемым ключом. В javascript массив, функция, регулярные выражения являются объектами и, конечно же, объекты являются объектами.

Объект — это контейнер свойства, где свойство имеет имя и значение. Имена свойств в объекте могут быть любой строкой, включая пустую строку. Значение свойства может быть любым значением javascript, кроме неопределенного.

Объекты в javascript не имеют классов. Нет ограничений на имена новых свойств или значения свойств. Объекты полезны для сбора и организации данных.

Объекты могут содержать другие объекты, поэтому они могут представлять древовидную или графическую структуру.

Javascript предоставляет функцию связывания прототипов, которая позволяет одному объекту наследовать свойства другого объекта. При правильном использовании это может сократить время инициализации объекта и потребление памяти.

Литерал объекта

Литерал объекта — это пара фигурных скобок, окружающих ноль или более имени/значения. Обратите внимание, что имя свойства может быть любой строкой, включая пустую строку.

var empty_object = {};
var student = {
    "first_name":"Rahul",
    "last_name":"Singh"
};
var company = {
    name:"Microsoft",
    software:"Windows"
};

Воспроизведение

Неопределенный создается, если делается попытка получить значение из несуществующего члена. Исключение TypeError возникает, если мы пытаемся получить значение из неопределенного.

student.place //undefined
student.place.zipcode // TyprError
student.place && student.place.zipcode //undefined

Обновлять

Обновляет значение свойства, если оно присутствует, иначе объект увеличивается.

var student = { name:”Rahul”};
 student.name = “Rahul Singh”;
 student.college = “MMMEC”;
 // If property not present then the object will be augmented.

Ссылка

Объекты Javascript никогда не копируются, они всегда передаются по ссылкам.

var a = {},b={},c={};
 // all a,b,c point to different object.
 var a = b = c ={};
 // all a,b,c point to same object.

Прототип

Каждый объект связан с объектом-прототипом, от которого он может наследовать свойства других объектов. Все объекты связаны с Object.prototype, стандартным объектом JavaScript. Так, с его помощью один объект может наследовать свойства других объектов. Ниже приведен простой метод, созданный в основном объекте, который упрощает наследование свойств между объектами. Javascript ищет свойство по всей цепочке прототипов, если оно не присутствует в качестве собственного свойства объекта. Можно ли использовать hasOwnProperty(), чтобы проверить, является ли свойство собственным или нет.

if(typeof Object.beget !== ‘function’){
  Object.beget = function (o){
   var F = function(){};
   F.prototype = o;
   return new F();
  }
 }
 var new_object = Object.beget(old_object);

Конструкторы, представляющие собой функции, имена которых обычно начинаются с заглавной буквы, могут использоваться с оператором new для создания новых объектов. Прототипом нового объекта будет объект, найденный в свойстве прототипа функции-конструктора.

Отражение

Можно определить свойства объекта, извлекая свойства и исследуя их. Для обследования можно использовать следующие методы:

typeof flight.number //’number’
typeof flight.status //’string’
hasOwnProperty returns true if the object has a particular property. It does not look at the prototype chain.
flight.hasOwnProperty(‘number’) //true
flight.hasOwnProperty(‘constructor’) //false

перечисление

Он используется для перебора всех имен свойств в объекте.

for (name in student){
 if(student[name] !== ‘function’ && student[name].hasOwnProperty()){
  console.log(name + ‘:’+student[name]);
  }
 }
 // Note in for in loop order is not defined.

Удалить

Используется для удаления свойства из объекта. Но это не коснется ни одного из свойств, присутствующих в связи прототипа.

student.name //Rahul
 
 delete student.name;
 student.name //Hari , form the prototype chain if present.

Глобальное снижение

Следует попытаться свести к минимуму объявление глобальной переменной. Поместив все функции и переменные в один глобальный объект.

P.S. Поиграйте с ним, чтобы узнать больше. — нивеш