2014-09-02 4 views
-1

Я хочу задать небольшой вопрос о функции JavaScript call(). Я начал изучать JavaScript в глубину, и я просто не могу понять it.why с этим примером я получаю результат:О функции вызова JavaScript

var args = Array.prototype.slice.call(arguments); 

И С этим я получаю ошибку .:

var args = Array.prototype.call(arguments); 

обе эти функции существуют в пределах __proto__ из массива, так как я знаю, что массив расширен. Функция. В этом примере возвращает истинное Array.__proto__ === Function.prototype

ответ

4

Тип:

typeof(Array.prototype.slice) 
> "function" 

(это функция, и вы можете использовать call - см Function.prototype.call)

typeof(Array.prototype) 
> "object" 

(это не функция и вы можете» т call - "не видно" Object.prototype.call)

+0

не понимает точки .. Вы можете объяснить? – Victorino

+0

@ Викторино, что вы не понимаете? Вы можете только «вызывать» функцию, а «Array.prototype» не является функцией. Какая часть этого вас путает, в частности. –

+0

теперь я получил его. спасибо – Victorino

4

call - метод функции. Array.prototype.slice - это функция, но Array.prototype не так, она не имеет метода call.

1
Array.__proto__ === Function.prototype 

Хе-хе. Я думаю, вы наткнулись на некоторую внутреннюю реализацию, на самом деле это не так. В зависимости от вашего фактического опыта работы с Computer Science/Software Engineering у меня возникает соблазн предложить игнорировать этот особенно артефакт.

Прототип - это экземпляр класса Object, и у них нет метода call (если он не определен пользователем или библиотекой). Таким образом, Whatever.prototype.call должен вызывать ошибку, как ожидалось.

Другого perculiar поведение:

Объекта InstanceOf Функция // -> истинной Функции InstanceOf объект // -> истинной

+0

спасибо за совет, я это учту. как я теперь про прототипную цепочку, это будет выглядеть так: «Массив - >> Функция - >> Объект», руда я пропустил что-то? – Victorino

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