我有一个自定义的JS对象,它代表网格。剥离下来的这个例子看起来像这样:

function Grid(c, r)
{
    var layout = [];
    var contentPointer = 0;

    this.getCell = function(c, r)
    {
        //Return selected cell
    }

    this.getRow = function(r)
    {
        //Return selected row
    }

    this.getCol = function(c)
    {
                //Return selected column
    }

    for(var row = 0; row < r; row++)
    {
        layout[row] = [];
        for(var col = 0; col < c; col++)
            layout[row][col] = 0;
    }
}


我使用var aGrid = new Grid(10, 10);在这里和这里创建了多个实例,然后以各种方式对其进行操作。添加/更新单元格等的内容

我想做的是调用console.log(aGrid);并能够自定义控制台显示的内容,因此,例如,我得到的是我添加的所有单元格值的字符串或类似内容。

在习惯于Actionscript的地方,我们将使用trace(aGrid);代替console.log(aGrid);,但是在AS3中,我可以覆盖对象的toString()方法,这将更新控制台输出中显示的内容。

我已经看到可以在JS中的Grid对象中添加toString()方法,但是除非我专门调用console.log(aGrid.toString());,否则控制台似乎不会使用它。虽然这很好,但我只是想知道是否有解决办法。

控制台是根据记录的对象的某种可重写方法实际上生成其输出还是为了获取价值而进行疯狂的内部魔术处理?

使用alert(aGrid);似乎使用toString()并获取自定义值,但我宁愿剥开自己的皮肤,也不愿使用alert();调试大型项目:)

任何意见都非常欢迎。谢谢。

PS-我不知道不同的浏览器对console.log()的处理方式是否不同,但我使用的是Chrome v33。

最佳答案

我已经看到可以在JS中的Grid对象中添加toString()方法,但是除非我专门调用console.log(aGrid.toString());,否则控制台似乎不会使用它。虽然这很好,但我只是想知道是否有解决办法


不,这没有办法。控制台本身可以决定如何显示传递的参数-Chrome控制台可让您动态检查对象,而不必尝试以某种方式对其进行序列化。如果要自定义输出,则需要将其传递一个字符串。

09-20 22:48