在javascript对象中声明数组会导致浏览器崩溃

时间:2013-07-22 04:43:47

标签: javascript

我正在尝试使用JavaScript编写一些对象。我有一个似乎正在工作的小对象,但这个对象需要一个多维数组。

当我尝试使用此对象的此片段时,我的浏览器崩溃了......

有没有关于如何在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);

我做错了什么?

1 个答案:

答案 0 :(得分:3)

首先,一些JavaScript最佳实践:

  1. 使用[]创建新数组,而不是new Array()
  2. 使用大写字母表示构造函数,因此function Map(...) {...},而不是map(...)
  3. 在声明功能之前不要引用功能,因此请将function generateCity(cityNum)放在this.generateCity = generateCity之前,
  4. 使用console.log,而不是alert
  5. 如果您正在构建一个对象,请将您的对象定义为原型。
  6. 这意味着这样做:

    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”正在打印。