Object.setPrototypeOf()
Пример задачи
function Human(name, age) {
this.name = name;
this.age = age;
}
let user = Object.setPrototypeOf({}, new Human("John", "55"));
console.log(Object.keys(user));
console.log(user.name);
Анализ работы Object.setPrototypeOf()
Object.setPrototypeOf()
let user = { name: 'John' },
arr = [1, 2, 3];
console.log('Начальное состояние:');
console.log(user); // { name: 'John' }
console.log(user[1]); // undefined
console.log(user.__proto__); // {}
console.log(user.length); // undefined
Object.setPrototypeOf(user, arr); // устанавливаем arr как прототип для user
console.log('Измененное состояние:');
console.log(user); // Array { name: 'John' }
console.log(user[1]); // 2
console.log(user.__proto__); // [ 1, 2, 3 ]
console.log(user.length); // 3
arr
user
length
Возвращаясь к нашему исходному примеру
Human
user
Human
user
name
age
Метод Object.keys(user)
вернет пустой массив, потому что у объекта user
нет собственных перечисляемых свойств. Свойство user.name
вернет "John"
, потому что это свойство доступно через прототип, установленный методом Object.setPrototypeOf()
.
console.log(Object.keys(user)); // []
console.log(user.name); // John
Заключение
Object.setPrototypeOf()
Object.setPrototypeOf()