Использовать случаи для Object.create(null)
Я понимаю, что использование Object.create(null)
создает объект, который не имеет свойства proto
(т.е. Object.getPrototypeOf( myObj ) === null
), но может ли кто-нибудь помочь мне понять, какие из них используются для этого?
Другими словами, зачем вы хотите создать объект, который полностью пуст (т.е. не наследует какие-либо методы из Object.prototype
)?
Ответы
Ответ 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
.