2012-09-06 13 views
5

私はJavaScriptの経験が豊富であっても、Objective javascriptを初めて使っています。ここで私のパラメータをcalc閉包に渡すにはどうしたらいいですか?パラメーターを渡す:Objective 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()); 

(calc.multiply(10,20))のようにcalcにパラメータを渡したいと思います。事前に

おかげ..

+1

私はちょうど言うことができます: 'インデントは素晴らしいものです'? –

+0

私は、除算の場合には、NaNをゼロで返すことを標準と考えています。しかし、あなたが明示的な検証を意図しているならば、警告はうまくいくと思います。 – Shmiddty

答えて

2

は、ここで簡単な方法です!

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(); 

そうでない場合、あなたはこのよう

2

通話方法calc.multiply(a, b)によると、このようにあるはずです:

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

IIFEが必要ですか?私はいいえと言うだろう。 – Bergi

0

を意味するか...仮引数を受け入れるように各メソッドを国防省する必要があります:以下

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

コードがあなたのために働く必要があります。

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)); 

私が行った編集は、返された各機能にabのパラメータを設定していましたあなたはそれを厳密にすることによってdivide機能であなたの比較を安全にゼロにすることができます。

これが役に立ちます。

+2

CalcはJavascriptコンストラクタではなく、代わりにモジュールパターンを使用します。大文字の関数名や新しいキーワードは必要ありません。それはシングルトンとして「現状のまま」機能します。 –

+0

合意。コードが修正されました。 – 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; 
      } 
     } 
    } 
})();​ 

アラートをエラーにすることを検討していますが、

0

calcには、2つの数値で何かを計算するオブジェクトを返すか、何かを計算する関数を持つオブジェクトをcalcにするだけです。あなたの要件calc.multiply(10,20)は、第二の溶液のためにされています

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; 
    } 
};​ 

そうでない場合は、calc(10,20).multiply()を使用するために、それはあなたが既に持っているクロージャを構築しますが、パラメータの代わりに、2つのローカル定数を持つことになります。

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; 
      } 
     } 
    } 
}; 
関連する問題