0

JavaScript を使用していくつかのオブジェクトを作成しようとしています。動作しているように見える小さなオブジェクトが 1 つありますが、このオブジェクトには多次元配列が必要です。

このオブジェクトのこのスニペットを使用しようとすると、ブラウザがクラッシュします...

javascript でオブジェクトを記述する方法についての良いチュートリアルはありますか?

function map(sizeX, sizeY)
{
    var cityArr = new Array();
    this.sizeX = sizeX;
    this.sizeY = sizeY;
    this.generateCity = generateCity;
    var cityXY = new Array();

    function generateCity(cityNum)
    {
        alert(cityNum);
    }
}

これを呼び出すと、ブラウザーがキャッシュする generateCity メソッドへの呼び出しを追加すると失敗します。

var objMap = new map();
//objMap.generateCity(2);

私は何を間違っていますか?

4

1 に答える 1

3

まず、JavaScript のベスト プラクティスをいくつか紹介します。

  1. ではなく、[]新しい配列を作成するために使用します。new Array()
  2. コンストラクター関数には大文字を使用するためfunction Map(...) {...}、 ではなくmap(...)
  3. 宣言する前に関数を参照しないfunction generateCity(cityNum)でくださいthis.generateCity = generateCity
  4. 使用console.log、しないalert
  5. オブジェクトを構築している場合は、プロトタイプに関数を配置して、オブジェクトをオブジェクトとして定義します。

つまり、次のようにします。

function Map(sizeX, sizeY)
{
   this.sizeX = sizeX;
   this.sizeY = sizeY;
   // you're not using these arrays. Why are they in your example code?
   var cityArr = [],
       cityXY = [];  
}

Map.prototype = {
  sizeX: 0, // Some default values, shared by all instances
  sizeY: 0, // unless overriden in the constructor function.
  generateCity: function(cityNum) { 
    // let's not block the entire page by using alert.
    console.log("cityNum: " + cityNum);
  }
}

そうは言っても、http: //jsfiddle.net/mtr24で見られるように、このコードは問題なく動作します (コンソールを開いた状態で実行すると、「cityNum: 2」が表示されます。

于 2013-07-22T05:23:26.040 に答える