Показать сообщение отдельно
  #1 (permalink)  
Старый 15.11.2014, 16:01
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

метод 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 тоесть текущий эллемент, только зачем он тут и как это все связать не пойму, только пожалуйста не отсылайте меня к мануалам, как работает это с одним аргументом я понял а как с двумя что то не доходит
Ответить с цитированием