Почему методы-прототипы JS работают без .cal () или .apply ()? - PullRequest
0 голосов
/ 12 января 2019

Как я знаю в JavaScript, методы-прототипы объекта нуждаются в контексте, поэтому мы должны вызывать их с call или apply.

Однако Array.prototype методы работают без использования call или apply.

Array.prototype.concat(1, 2, 3) // [1,2,3]

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Да, но это также работает, когда вы передаете контекст ему, как

const arr = Array.prototype.concat.call([],1,2,3);
console.log(arr);

Нет никакой разницы только потому, что Array.prototype совпадает с []. Но если у вас есть массивоподобный объект вместо массива, и вы хотите вызвать какой-нибудь метод массива, вам нужно использовать call или bind.

Вероятно, наиболее часто используемым является

Array.prototype.slice.call(arguments)

, который превращает arguments функции (которая не является реальным массивом) в массив.

0 голосов
/ 12 января 2019

Ну, например, контекст уже существует. И это Array.prototype. Как мы помним контекст, это объект перед точкой:

А ваш пример мы можем переписать так и дать равный результат:

console.log([].concat.call(Array.prototype,[1,2,3]))
...