2017-02-07 2 views
1

С Array.prototype сам возвращает пустой массив, откуда берутся все функции?Откуда берутся функции Array.prototype?

Почему я могу вызывать функции что-то вроде Array.prototype.sort, даже Array.prototype не является объектом?

Array.prototype.__proto__ - объект.

У меня такой же вопрос на случай Function.prototype.

+2

Почему вы думаете, 'Array.prototype' не является объектом? Массивы (и функции) являются объектами в JS. –

ответ

0

Array.prototype не является объектом?

Как вы поняли эту идею? Это объект:

typeof Array.prototype // "object" 

Как таковой он может иметь свойства, как и любой другой объект. И это делает:

Array.prototype.hasOwnProperty("sort") // true 
Array.prototype.sort // function(compare) { … } 

Это то же самое для любого другого массива, вы можете создавать собственные свойства на них, как на каждый JavaScript Object:

var foo = []; 
foo.bar = "baz"; 
typeof foo.bar // "string" 
Array.isArray(foo) // true 
+0

Спасибо за ваш комментарий. Да 'typeof Array.prototype' возвращает« объект », но' Array.isArray (Array.prototype) 'возвращает также true, что означает, что он является массивным, не так ли? Как можно восстановить функции из массива? –

+1

Каждый массив представляет собой объект со специальным свойством 'length' (и, возможно, некоторыми оптимизациями движка), но стандартным объектом js во всех других отношениях. – Bergi

+0

Я вижу. Почему 'Array.prototype' не содержит простой объект key/value вместо массива или функции. Использование массива в качестве хеш-таблицы ключей/значений не является хорошей практикой. –

2

Array.prototype является объектом, и большинство функций, которые вы использовали для массива. Так что это прототип .

Откройте панель chrome dev и проверьте ее, как показано ниже.

enter image description here

+1

+1 для 'console.debug' (к сожалению, не стандарт). Дополнение: 'Array.prototype.sort' не отображается в' console.log', потому что это не свойство [enumerable] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ Объект/defineProperty # Описание). Проверьте с помощью 'Array.prototype.propertyIsEnumerable (« sort »)'. Реализация 'console.log' использует [' Object.keys'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) и, как указано в docs, * Метод Object.keys() возвращает массив собственных перечислимых свойств данного объекта * – mrlew

+0

Благодарим вас за комментарий, xdazz. Да, я проверил на хром-консоли, и у меня возник вопрос. Он говорит Array [0] или [], когда вы вызываете 'Array.prototype'. 'Array.isArray (Array.prototype) 'возвращает true. Массив - один из встроенных объектов, поэтому он является объектом. –

Смежные вопросы