Захват содержимого собственных прототипов

#javascript

#javascript

Вопрос:

Попробуйте выполнить следующее:

 for (var key in String.prototype)
    console.log(key);
  

Это не дает вам … ничего (ну, если вы сами не определили какой-нибудь посторонний материал). Тем не менее, у вас все еще есть String.prototype.split например. Я пробовал это на любом другом собственном объекте ( Number , Array Object ) для получения того же результата.

Следующее также «не работает»:

 for (var key in Array)
    console.log(key);
  

Пока есть Array.isArray например.

Object.keys(Array.prototype) выдает пустой массив, и так делает Object.keys(Array) . Однако, Object.keys(jQuery) например, предоставляет гигантский массив, как и ожидалось.

Итак, почему мы не можем перебирать исходные файлы, предоставляемые браузером, но при этом получать к ним доступ?

Ответ №1:

Со страницы MDC для for..in :

for...in Цикл не выполняет итерацию по встроенным свойствам

Причина в том, что свойства в Javascript либо перечислимы, либо неисчислимы; «перечислимый» означает, что вы можете получить доступ к свойству в for..in цикле. Все встроенные свойства не поддаются перечислению.

Современные браузеры поддерживают Object.getOwnPropertyNames метод:

 console.log(Object.getOwnPropertyNames(Array.prototype));
// ["length", "constructor", "concat", "map", "sort", "join", "indexOf", "filter", "some", "toString", "reduceRight", "splice", "forEach", "shift", "unshift", "toLocaleString", "lastIndexOf", "reverse", "reduce", "pop", "push", "every", "slice"]