首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >私有方法使用与不使用函数的混淆

私有方法使用与不使用函数的混淆
EN

Stack Overflow用户
提问于 2012-06-17 15:46:30
回答 1查看 298关注 0票数 2

我没有上过任何官方课程。

我经常在教程中读到这篇文章:

代码语言: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“更容易阅读,但是没有教程使用这个:

代码语言:javascript
运行
复制
// *my question here* method to access balance
   this.getBalance = balance * 0.9 ;

然后

代码语言:javascript
运行
复制
console.log( myBank.getBalance );

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

两种类型的代码有什么不同吗?是否需要避免使用.getBalance 操作私有变量?

谢谢你提前解释。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-17 15:54:19

您必须理解变量、函数和函数调用之间的区别。这是可变的:

代码语言:javascript
运行
复制
this.getBalance = balance * 0.9 ;

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

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

在以下情况下:

代码语言:javascript
运行
复制
this.getBalance = function() {
   return balance * 0.9 ;
};

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

代码语言:javascript
运行
复制
var fun = this.getBalance

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

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

正如您所看到的,在给一个函数赋值和将一个简单的值(类似于数字)赋值给一个变量之间有很大的区别。根据您选择的方法,它将有不同的含义。为了充分利用JavaScript的功能,您必须了解它的功能方面。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11072643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档