метод apply с двумя аргументами
Здравствуйте есть функция
function flexisum(a) {
var total = 0;
for(var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (!element) continue; // Игнорировать значения null и undefined
// Попытаться преобразовать аргумент в число n исходя из типа аргумента
var n;
switch(typeof element) {
case "number":
n = element;
// Преобразование не требуется
break;
case "object":
if (element instanceof Array) // Рекурсивный обход массива
n = flexisum.apply(this, element);
else n = element.valueOf( ); // Для других объектов вызвать valueOf
break;
case "function":
n = element( ); // Попытаться вызвать функцию
break;
case "string":
n = parseFloat(element); // Попытаться преобразовать строку
break;
case "boolean":
n = NaN; // Логические значения преобразовать невозможно
break;
}
// Если было получено нормально число – добавить его к сумме.
if (typeof n == "number" && !isNaN(n)) total += n;
// В противном случае сгенерировать исключение
else
throw new Error("sum(): ошибка преобразования " + element + " в число");
}
return total;
}
здесь есть момент где вызывается рекурсивный вызов функции и там же применяется метод apply n = flexisum.apply(this, element); я понимаю что здесь применяется фунция apply и она предназначена для масивов в отличии от call ей передается два оргумента один element определенный как массив а другой this тоесть текущий эллемент, только зачем он тут и как это все связать не пойму, только пожалуйста не отсылайте меня к мануалам, как работает это с одним аргументом я понял а как с двумя что то не доходит :no: |
извините что то я не понял, я хотел бы услышать разъяснение, вот на что в данном примере указывает this?
|
flexisum(1, 2, 3); flexisum.call(this, 1, 2, 3); flexisum.apply(this, [1, 2, 3]); Все эти три варианта вызова, идентичны. apply этот вызов функции с аргументами, где аргументы перечислены в массиве, в отличии от простых вызовов, где каждый аргумент нужно перечислять. например:
function test(a, b, c) {
alert("a: " + a + ", b: " + b + ", c: " + c);
}
test(1, 2, 3); // a: 1, b: 2, c: 3
test.call(this, 1, 2, 3); // a: 1, b: 2, c: 3
test.apply(this, [1, 2, 3]); // a: 1, b: 2, c: 3
Что же такое this? Это контекст в котором выполняется функция, просто вызывая функцию через call/apply контекст является обязательным аргументом, потому и отдается вызывающей функции, текущий контекст области в которой происходит вызов. |
Цитата:
Да и не важно это, ибо this в этой функции вообще не используется. Цитата:
|
что то запутался тоесть в моем случае можно this опустить?
|
serrrgggeee,
Можешь заменить на null или любой объект. |
| Часовой пояс GMT +3, время: 00:30. |