Ссылка на функцию push массива [дубликат]

avatar
dark_gf
1 июля 2021 в 18:20
36
2
0

Почему я не могу этого сделать:

var a = [];
var b = a.push;
b(1);

выдает ошибку, я знаю как этого избежать, но почему это не работает в js?

Источник
VLAZ
1 июля 2021 в 18:22
4

Поскольку значение this определяется во время вызова. Однако вы отменяете связь вызова с a. Следовательно, при вызове b() (который является ссылкой на Array.prototype.push) значение this отсутствует, поэтому нечего помещать в .

dark_gf
1 июля 2021 в 18:30
0

пожалуйста, напишите как ответ, чтобы я мог принять его

Ответы (2)

avatar
Unmitigated
1 июля 2021 в 18:23
1

Значение this определяется тем, как вызывается функция. Вы можете использовать Function#bind, чтобы установить значение this.

var a = [];
var b = a.push.bind(a);
b(1);
console.log(a);
avatar
eagercoder
1 июля 2021 в 18:23
-1

Попробуйте это:

var a = [];
var b = (param) => a.push(param);
b(1);