Потому что если посмотреть в консоль, станет понятно, что прототип обычных объектов - это не Object, а Object.prototype, Object же не является чьим либо прототипом, Ojbect - это нативный конструктор (то есть то что внутри него - нативный код браузера, не JS).
Но если предположить что это все же JS, выглядело бы это как-то так:
const objectPrototype = {
toString: () => 'string!'
// и другие методы которые мы хотим иметь на всех объектах
}
function Object() {
/* здесь магия нативного кода */
}
Object.prototype = objectPrototype
/*
* Здесь мы по сути определяем "статический" метод, он будет доступен
* только на конструкторе Object и никогда не попадет
* в Object.prototype, следовательно новые объекты его не унаследуют
*/
Object.keys = obj => {
// делаем что-то и возвращаем ключи
}
const obj = new Object()
console.log(obj.__proto__) // {toString: ƒ}