0

コードを見て、それがどのような Javascript アプローチなのか教えてください。

var Arithmetic = function(){
  var obj = {
    add: function(a,b) { return a + b; },
    multiply: function(a,b) { return a * b; }
  };
  return obj;
}();

var resultAdd = Arithmetic.add(a,b);
var resultMul = Arithmetic.multiply(a,b);

なぜ人々はこのように js コードを書くのか....そのような方法で書くことには何らかの利点があります。

上記のコードは、任意のデザイン パターンに関連していますか? もしそうなら、名前を教えてください。

私はいつもこのようにコードを書いていますが、理解しやすいです。

function add(a,b)
{
return a+b;
}

function multiply(a,b)
{
return a*b;
}

そして、私はそれをこのように呼びます

var x=add(2,3);
var y=multiply(5,8);

また、私のやり方でコードを書くことの欠点を教えてください。

4

2 に答える 2

2

自分のやり方でコードを書くことの欠点は、グローバル名前空間に多くのものを置くことです。数値に作用する加算および乗算メソッドを定義するコードを追加し、加算および乗算メソッドも定義するがベクトルに作用するベクトルを扱うライブラリを含めるとどうなるか想像してみてください。最後に定義されたメソッドは、以前に定義されたものを上書きし、それらに依存するコードの一部を破壊します。

このため、グローバル スコープを汚染しないことが望ましいです。利用可能にしたい機能がある場合は、名前空間 (Arithmetic.add()ではなくadd()) を介して利用できるようにします。

コードを少し分析すると、var objはグローバル スコープではなく、無名関数のスコープで定義されているため、その外部のコードはobj衝突することなく変数の名前を使用できます。この機能 (2 つのメソッド) は、無名関数から 2 つのプロパティを持つオブジェクトを返すことにより、パブリックに使用できるようにエクスポートされます。2 つのメソッドの複数のインスタンスは必要ないため、無名関数はすぐに戻ります ( http://en.wikipedia.org/wiki/Immediately-invoked_function_expression )。

このパターンのもう 1 つの利点は、プライベート変数を使用できることです。

var uniqueId = function() {
  var id = 0;
  return function() { return id++; }
}();

uniqueId(); // 0
uniqueId(); // 1

上記の例では、メカニズム全体ではなく、必要な機能インターフェイスのみを公開するため、uniqueId 関数を誤って破損して悪い (一意ではない) 結果を生成する方法はありません。

あなたのスタイルで同等のものを検討してください:

var id = 0;
function uniqueId() { return id++; };

uniqueId(); // 0
id = 0;
uniqueId(); // 0
于 2013-11-13T11:40:32.437 に答える