Я создаю оболочки для распространенных типов JavaScript, которые предлагают больше возможностей.В дополнение к новым методам и свойствам они имеют все те же методы и свойства, что и типы, для которых они являются оболочками.Я не полностью переписываю уже существующие методы, даже если могу изменить их логику, поэтому я всегда обращаюсь к исходному методу с перенесенным значением.
Вот как может выглядеть charCodeAt
обертка вокруг строк:
this.charCodeAt = function (index) {
return internalValue.charCodeAt(index);
};
Мне не нужно много делать в приведенном выше примере:
- Параметр
index
в вызове string.charCodeAt
является необязательным, поэтому мне не нужно писать какую-либо логику, которая бы обрабатывала случай, когда тот же параметр был опущен при вызове wrapper.charCodeAt
. index
- единственный параметр, который принимает string.charCodeAt
, поэтомуТакже нет необходимости обрабатывать дополнительные переменные, передаваемые в wrapper.charCodeAt
, так как они будут игнорироваться.
Я столкнулся с проблемой при попытке вызвать метод, который принимает переменное число аргументов.Рассматриваемый метод array.concat
.Существуют и другие контексты, в которых я написал код для передачи произвольного числа аргументов функции в JavaScript, и я использовал решение func.apply(null, argumentArray)
, где argumentArray
- массив аргументов, которые я хочу передать func
.Это не работает для .concat
:
var array = [0, 1];
var error;
try {
array.concat.apply(null, [2, 3]);
} catch (error) {
console.log(error);
}
Сообщение об ошибке, которое записывается на консоль, гласит TypeError: Array.prototype.concat called on null or undefined
.Я исследовал, используя apply
с concat
, и похоже, что у меня возникают аналогичные проблемы с другими методами, которые определены в прототипе конструктора.
Почему я сталкиваюсь с этой проблемой с array.concat.apply
?Как правильно передать произвольное количество аргументов в виде массива в метод, такой как .concat
?