Прототип объекта
__proto__
или [[Prototype]]
— скрытое системное свойство, которое служит связующим звеном между объектами.
var obj1 = { prop1: true };
var obj2 = { prop2: true };
obj2.__proto__ = obj1;
obj2.prop2; // obj2.prop2
obj2.prop1; // obj2.__proto__.prop1
Все типы данных наследуются от Object:
Number.prototype.__proto__ === Object.prototype;
Конец цепочки:
Object.prototype.__proto__ === null;
Метод hasOwnProperty
Проверяет, содержит ли объект указанное свойство.
var obj1 = { prop1: true };
var obj2 = { prop2: true };
obj2.__proto__ = obj1;
obj2.hasOwnProperty('prop2'); // => true
obj2.hasOwnProperty('prop1'); // => false
Object.create()
Cоздаёт новый объект с указанными объектом прототипа и свойствами.
const obj1 = {};
obj1.__proto__ === Object.prototype;
const obj2 = Object.create(null);
obj2.__proto__ === undefined;