Подтвердить что ты не робот

Использовать случаи для Object.create(null)

Я понимаю, что использование Object.create(null) создает объект, который не имеет свойства proto (т.е. Object.getPrototypeOf( myObj ) === null), но может ли кто-нибудь помочь мне понять, какие из них используются для этого?

Другими словами, зачем вы хотите создать объект, который полностью пуст (т.е. не наследует какие-либо методы из Object.prototype)?

4b9b3361

Ответ 1

В очень редких случаях, когда что-то могло быть добавлено к Object.prototype

Object.prototype.bar = 'bar';

Возможно, лучше создать объект с Object.create(null), поскольку он не наследует этого, рассмотрите

({}).bar;                // bar
// vs
Object.create(null).bar; // undefined

Это означает, что вам не нужно беспокоиться, например, если вы использовали цикл for..in

Кроме того, вы можете сделать это, чтобы вы терпели неудачу instanceof tests

Object.create(null) instanceof Object; // false

Это потому, что instanceof в основном тестирует цепочку прототипов против RHS, и такой цепи нет.

Ответ 2

Вы можете использовать такой объект для карты значений ключа. Без цепи прототипов вы можете быть уверены, что такие вещи, как .toString(), невольно возникают на объекте. Это означает, что вы можете неосторожно обращаться к свойствам на нем, и вместо Object.prototype.hasOwnProperty.call вы можете использовать оператор in.