метод 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, время: 11:28. |