Сначала обратите внимание, что вы фактически вызываете свою функцию немедленно, строка:
test(this).apply(body);
Сбой, потому что сначала вы вызываете функцию test
, передающую this
в качестве аргумента , а затем вы пытаетесь получить доступ к свойству apply
результата функции, которое равно undefined
, поскольку ваша функция ничего не возвращает.
Этот доступ к свойству по значению undefined
дает вамисключение TypeError
.
Теперь давайте посмотрим, что вы на самом деле хотите сделать, если вы хотите передать значение переменной body
в качестве аргумента вашей функции, установив внешнее значение this
в качестве this
значения test
вы можете сделать:
test.apply(this, [body]);
Но именно поэтому существует метод call
, когда вы точно знаете, какие аргументы передать, вам не нужносоздать массив ни за что, вы просто передаете аргументы:
test.call(this, body);
Метод apply
действительно полезен, когда вы имеете дело, например, с динамическим числом аргументов, когда вы знаете, какие аргументы хотите передать,и до сих порвозможность установки значения this
, call
- это то, что вам нужно.