Buenas a todos los compañeros de aprenderaprogramar.com. A continuación dejo una posible solución del ejercicio CU01178E del curso JavaScript desde cero.
EJERCICIO
Escribe este código, ejecútalo y responde a las preguntas que aparecen a continuación.
function conversor(toUnit, factor, offset, input) {
offset = offset || 0;
return [((offset+input)*factor).toFixed(2), toUnit].join(" ");
}
var milesToKm = conversor.bind(undefined, 'km', 1.60936, 0);
var poundsToKg = conversor.bind(undefined, 'kg', 0.45460, 0);
var farenheitToCelsius = conversor.bind(undefined, 'gradosC',0.5556, -32);
alert(milesToKm(10));
alert(poundsToKg(2.5));
alert(farenheitToCelsius(98));
a) ¿Cuántas funciones ligadas (copias parametrizadas) de la función conversor se crean en este código?
Se crean tres funciones ligadas que son: var milesToKm, var poundsToKg y var farenheitToCelsius.
b) ¿Qué es lo que devuelve la función conversor?
La función conversor devuelve el resultado de la conversación de unas mediadas a otras.
c) ¿Qué objeto actúa como this en la función milesToKm?
Como en dicha función el this está declarado como 'undefined' el objeto que actúa como this es el objeto global de JavaScript, es decir, el objeto Window.
d) ¿Qué tarea cumple y con qué fórmula trabaja la función milesToKm?
La tarea de la función milesToKm es convertir millas en kilómetros. La fórmula con la que trabaja la función es: el parámetro offset más las unidades de la medida que se convertirá por el factor de las unidades de la medida conversora.
(offset+input)*factor.
e) ¿Qué tarea cumple y con qué fórmula trabaja la función poundsToKg?
La tarea de la función milesToKm es convertir pounds en kilógramos. La fórmula con la que trabaja la función es: el parámetro offset más las unidades de la medida que se convertirá por el factor de las unidades de la medida conversora.
(offset+input)*factor
f) ¿Qué resultado devuelve milesToKm(10) y qué significa este resultado?
Devuelve: 16.09 km. Es decir que 10 millas equivales a 16.09 km.
g) ¿Qué resultado devuelve poundsToKg(2.5) y qué significa este resultado?
Devuelve: 1.14 kg. Quiere decir que 2.5 pounds equivales a 1.14 kg.
h) ¿Qué resultado devuelve farenheitToCelsius(98) y qué significa este resultado?
Devuelve: 36.67 gradosC. Quiere decir que 98 grados fahrenheit equivalen a 36.67 gradosC.
i) ¿Qué significado tiene la expresión offset = offset || 0;?
Quiere decir que el parámetro offset equivaldra al parámetro offset que se le ha pasado en la función y en su defecto valdrá 0.
j) ¿Cuál es la finalidad del uso de toFixed(2)?
Devuelve un String con el número o variable sobre el que se invoca el método con tantos decimales como indique el parámetro n (toFixed(n)).
Respues extraida de la entrega: CU01156E del curso JavaScript desde cero.
https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=837:convertir-string-a-number-javascript-redondear-tofixed-isnan-toprecision-parseint-parsefloat-cu01156e-&catid=78:tutorial-basico-programador-web-javascript-desde-&Itemid=206 k) ¿Por qué crees que se usa el parámetro offset en la función conversor?
Para que haya una expresión arimética y no nos salga el mensaje: NaN.
l) Modifica el código para ampliar la información que se nos muestra: introduce un parámetro fromUnit en la función conversor de modo que el resultado nos informe del dato de origen, sus unidades, y el dato convertido y sus unidades.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function conversor(toUnit, factor, offset, input, fromUnit){
offset = offset || 0;
return [input+' '+fromUnit+' equivalen a: '+((offset+input)*factor).toFixed(2), toUnit].join(' ');
}
var milesToKm = conversor.bind(undefined, 'km', 1.60936, 0);
var poundsToKg = conversor.bind(undefined, 'kg', 0.45460, 0);
var farenheitToCelsius = conversor.bind(undefined, 'gradosC', 0.5556, -32);
alert(milesToKm(10, 'miles'));
alert(poundsToKg(2.5, 'pounds'));
alert(farenheitToCelsius(98, 'farenheit'));
</script>
</head>
<body>
</body>
</html>
Mi duda sale aquí, por qué cuando paso el parámetro como un parámetro en la función ligada, no funciona? A caso las funciones ligadas tienen un límite de pasarle los parámetros? Por ejemplo, el siguiente código no funciona correctamente y no entiendo por qué:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function conversor(toUnit, factor, offset, input, fromUnit){
offset = offset || 0;
return [input+' '+fromUnit+' equivalen a: '+((offset+input)*factor).toFixed(2), toUnit].join(' ');
}
var milesToKm = conversor.bind(undefined, 'km', 1.60936, 0, 'miles');
var poundsToKg = conversor.bind(undefined, 'kg', 0.45460, 0, 'pounds');
var farenheitToCelsius = conversor.bind(undefined, 'gradosC', 0.5556, -32, 'farenheit');
alert(milesToKm(10));
alert(poundsToKg(2.5));
alert(farenheitToCelsius(98));
</script>
</head>
<body>
</body>
</html>
Gracias.