Добрый день! Чтобы вывести все ключи объекта, включая унаследованные от его прототипа, можно использовать метод `for...in`, который перебирает все перечисляемые свойства объекта и его прототипов.
Вот пример функции, которая выводит все ключи объекта:
```javascript
const obj = {
name: 'Alex',
age: 43,
};
// Добавим свойство к прототипу
Object.prototype.greeting = function() {
return `Hello, my name is ${this.name}`;
}
function logAllKeys(obj) {
for (let key in obj) {
console.log(key);
}
}
logAllKeys(obj);
```
В этом примере `for...in` перебирает все ключи, включая те, которые унаследованы от прототипа объекта `Object`. Однако учтите, что `for...in` выведет только перечисляемые свойства. Некоторые свойства, такие как методы, могут быть не перечисляемыми.
Если вам нужно получить только перечисляемые свойства, но также учитывать ключи с прототипа, нужно дополнительно рассмотреть использование `Object.getOwnPropertyNames()` и `Object.keys()` для добавления уникальных свойств, если это необходимо.
Если вам нужны все свойства, включая неперечисляемые, вы можете использовать метод `Reflect.ownKeys()`:
```javascript
function logAllKeysIncludingNonEnumerable(obj) {
let keys = Reflect.ownKeys(obj);
for (let key of keys) {
console.log(key);
}
let prototype = Object.getPrototypeOf(obj);
while (prototype !== null) {
keys = Reflect.ownKeys(prototype);
for (let key of keys) {
console.log(key);
}
prototype = Object.getPrototypeOf(prototype);
}
}
logAllKeysIncludingNonEnumerable(obj);
```
Этот код выведет все ключи, включая ключи из прототипа, как собственные, так и унаследованные, включая недоступные для `for...in`.