2012-09-06 10 views
5

Soy nuevo en Objective Javascript incluso tuve una buena cantidad de experiencia en Javascript. ¿Cómo paso mis parámetros al cierre de cálculo aquí?parámetro de paso: Objectivo javascript

var calc = (function() { 
    var a = 5; 
    var b = 0; 
    return { 
     add: function() { 
      return a + b; 
     }, 
     subtract: function() { 
      return a - b; 
     }, 
     multiply: function() { 
      return a * b; 
     }, 
     divide: function() { 
      if (b != 0) return a/b 
      else { 
       alert('division by zero'); 
       return false; 
      } 
     } 
    } 
})();​ 

    console.log(calc.divide()); 

Quiero pasar los parámetros a calc like (calc.multiply (10,20));

Gracias de antemano ..

+1

¿Puedo decir: 'la indentación es algo maravilloso'? –

+0

Creo que el estándar es devolver 'NaN' en casos de división por cero. Pero, si tiene la intención de la validación explícita, supongo que la alerta está bien. – Shmiddty

Respuesta

2

Aquí es una forma sencilla!

var calc = function(a,b) { 
    return { 
     add: function() { 
      return a + b; 
     }, 
     subtract: function() { 
      return a - b; 
     }, 
     multiply: function() { 
      return a * b; 
     }, 
     divide: function() { 
      if (b != 0) return a/b 
      else { 
       alert('division by zero'); 
       return false; 
      } 
     } 
    } 
}; 

//console.log(calc.divide()); 
//I want to pass the parameters to calc like (calc.multiply(10,20)); 

calc(10,20).multiply(); 

de lo contrario, tendrá que mod cada método para aceptar los argumentos formales ...

2

De acuerdo con el método de llamada calc.multiply(a, b): No debería ser así:

var calc = (function() { 
    return { 
     add: function(a, b) { 
      return a + b; 
     }, 
     subtract: function(a, b) { 
      return a - b; 
     }, 
     multiply: function(a, b) { 
      return a * b; 
     }, 
     divide: function(a, b) { 
      if (b != 0) return a/b 
      else { 
       alert('division by zero'); 
       return false; 
      } 
     } 
    } 
})(); 

console.log(calc.divide(20, 2)); 
+0

¿Hay una necesidad para el IIFE? Yo diría que no. – Bergi

0

¿Quieres decir así:

var calc = (function() { 
    var a = 5; 
    var b = 0; 
    return { 
     add: function() { 
      return a + b; 
     }, 
     subtract: function() { 
      return a - b; 
     }, 
     multiply: function() { 
      return a * b; 
     }, 
     divide: function(n, d) { 
      if (n != 0) return n/d 
      else { 
       alert('division by zero'); 
       return false; 
      } 
     } 
    } 
})(); 

alert(calc.divide(3, 4));​ 
0

El siguiente código debe trabajar para usted:

var calc = (function() { 
    var a = 5; 
    var b = 0; 

    return { 
     add: function(a, b) { 
      return a + b; 
     }, 
     subtract: function(a, b) { 
      return a - b; 
     }, 
     multiply: function(a, b) { 
      return a * b; 
     }, 
     divide: function(a, b) { 
      if (b !== 0) return a/b; 
      else { 
       alert('division by zero'); 
       return false; 
      } 
     } 
    }; 
})(); 

console.log(calc.multiply(10, 10)); 

cambios que realicé fueron escenario a y b parámetros en cada regresaron functi y haciendo que su comparación sea cero más segura en la función divide haciéndola estricta.

Espero que esto ayude.

+2

Calc no es un constructor de Javascript; en su lugar, usa el patrón del módulo. No es necesario el nombre de la función en mayúscula o la nueva palabra clave. Funcionaría solo 'como está' como singleton. –

+0

De acuerdo. El código ha sido arreglado. – Travis

0
var calc = (function() { 
    return { 
     add: function(a, b) { 
      return a + b; 
     }, 
     subtract: function(a, b) { 
      return a - b; 
     }, 
     multiply: function(a, b) { 
      return a * b; 
     }, 
     divide: function(a, b) { 
      if (b != 0) return a/b 
      else { 
       alert('division by zero'); 
       return false; 
      } 
     } 
    } 
})();​ 

Aunque consideraría cambiar su alerta para arrojar un error.

0

Puede dar los parámetros a calc, que devuelve un objeto para calcular algo con los dos números, o simplemente hace calc un objeto con funciones que calculan algo. Su requisito calc.multiply(10,20) es para la segunda solución:

var calc = { 
    add: function(a, b) { 
     return a + b; 
    }, 
    subtract: function(a, b) { 
     return a - b; 
    }, 
    multiply: function(a, b) { 
     return a * b; 
    }, 
    divide: function(a, b) { 
     if (b != 0) return a/b 
     alert('division by zero'); 
     return false; 
    } 
};​ 

De lo contrario, para el uso de calc(10,20).multiply(), que sería la construcción del cierre que ya tiene, pero con parámetros en lugar de las dos constantes locales:

function calc(a, b) { 
    return { 
     add: function() { 
      return a + b; 
     }, 
     subtract: function() { 
      return a - b; 
     }, 
     multiply: function() { 
      return a * b; 
     }, 
     divide: function() { 
      if (b != 0) return a/b 
      alert('division by zero'); 
      return false; 
     } 
    }; 
} 
1
var calc = function(a,b) { 
    return { 
     add: function() { 
      return a + b; 
     }, 
     subtract: function() { 
      return a - b; 
     }, 
     multiply: function() { 
      return a * b; 
     }, 
     divide: function() { 
      if (b != 0) return a/b 
      else { 
       alert('division by zero'); 
       return false; 
      } 
     } 
    } 
}; 
Cuestiones relacionadas