私人方法使用或不使用功能的混淆

时间:2012-06-17 15:46:31

标签: javascript oop class

我没有接受任何正式的Javascript课程。

我经常在教程中阅读:

function Bank(name) {
   this.name = name;
   var balance = 100;

   // *my question here* method to access balance
   this.getBalance = function() {
       return balance * 0.9 ;
   };
}

var myBank = new Bank("My Bank");
console.log( myBank.getBalance() );

为什么开发人员使用getBalance()而不是getBalance?

我认为“getBalance”更容易阅读,但没有教程使用它:

// *my question here* method to access balance
   this.getBalance = balance * 0.9 ;

然后

console.log( myBank.getBalance );

我没有看到任何使用上述样式编写的教程,即使它更简单。所以:

2种代码之间有什么不同吗?是否有任何关注以避免.getBalance操作私有变量?

先谢谢你解释。

1 个答案:

答案 0 :(得分:3)

您必须了解变量,函数和函数调用之间的差异。这是变量:

this.getBalance = balance * 0.9 ;

执行代码时,getBalance变量的值计算一次。每次访问getBalance(没有括号)时,都会返回先前计算的值。

使用getBalance变量有一个重要的含义。如果您以后修改基础balance变量,getBalance将不会反映该更改,因为它是使用旧balance值计算的。

在下面的案例中:

this.getBalance = function() {
   return balance * 0.9 ;
};

getBalance也是可变的,但它指的是一个函数,而不是一个简单的值。如果您像变量一样访问它,您将获得一个函数引用:

var fun = this.getBalance

您现在可以使用fun()调用该函数,但fun引用本身(与this.getBalance相同)在您的情况下不是很有用。

当然,您可以使用this.getBalance()来调用该函数。语义差异如下:每次调用getBalance()时,都会执行函数体。这意味着balance的值会再次被读取,getBalance()返回值始终是最新的。

正如您所看到的,分配函数和为变量分配简单值(如数字)之间存在巨大差异。根据您选择的方法,它会产生不同的含义。您必须了解JavaScript的功能方面才能充分利用其功能。