Кто-нибудь может объяснить, почему?
Поскольку Object.prototype
находится в цепочке прототипов window
.
console.log(window instanceof Object);
Поэтому каждое свойство в Object.prototype
доступно как «глобальная переменная», например,
console.log(window.toString === Object.prototype.toString);
Это не , специфичный для Firefox, кстати.
и если возможно расширить прототип Object без использованияглобальный охват?
Нет.Это побочный эффект от того, как window
и цепочка прототипов работают.
Поскольку Object.prototype
является частью почти каждой цепочки прототипов, вам, как правило, следует избегать ее расширения нестандартными методами.
В частности, относительно values
: существует Object.values
, который работает аналогично и является стандартным методом.Предпочитаю использовать / polyfill этот вместо добавления вещей к Object.prototype
.