实例化javascript函数会评估其成员函数吗?

时间:2014-06-16 00:44:34

标签: javascript oop

以下函数的实例化会导致在其成员函数中评估return _rows * _columns吗?

所以当我打电话给myTable.getCellCount()时,它不重复评估,只是返回值?这可能很重要,如果不是_rows是一个整数,它实际上是一个昂贵的操作。

function Table (rows, columns) {
 // save parameter values to local variables
 var _rows = rows;
 var _columns = columns;

 // return the number of table cells
 this.getCellCount = function() { 
    return _rows * _columns; 
 };
}

var myTable = new Table(10,2);

3 个答案:

答案 0 :(得分:1)

没有。它将导致执行:

 this.getCellCount = function() { 
    return _rows * _columns; 
 };

在你调用它之前不会执行函数,例如执行myTable.getCellCount()

答案 1 :(得分:1)

您可以通过以下方式对此进行测试:

console.log('called');

...在你的功能中。

您将看到代码示例中未调用它。

如果您希望急切地计算产品并缓存值,则必须在构造函数中本地执行此操作。

答案 2 :(得分:1)

实例化Table会分配getCellCount方法,但不会运行它。

如果它包含昂贵的操作,您可以缓存结果:

function Table (rows, columns) {
 // save parameter values to local variables
 var _rows = rows,
     _columns = columns,
     _cellCount = _rows * _columns;

 // return the number of table cells
 this.getCellCount = function() { 
    return _cellCount; 
 };
}