24.使用 closure 闭包来保护对象内部的属性不被外部修改

说明

在之前的挑战中,bird具有公共属性name。它被认为是公共的,因为它可以在bird的定义之外被访问和更改。

bird.name ="Duffy";

因此,你的代码的任何部分都可以轻松地将bird的名称更改为任何值。联想到像密码和银行帐户可以轻松的被你代码库的任何部分更改,这可能会导致很多问题。

使属性为私有的最简单的方法是在构造函数中创建一个变量。这会将该变量的范围更改为构造函数内的全局变量。这样,只能通过构造函数中的方法访问和更改属性。

function Bird() {
  var hatchedEgg = 10; //私有属性

  this.getHatchedEggCount = function() { // 鸟类对象可以使用的公开的方法
    return hatchedEgg;
 };
}
var ducky = new Bird();
ducky.getHatchedEggCount(); //返回10

这里getHachedEggCount是一种特权方法,因为它可以访问私有变量hatchedEgg。这是可能的,因为hatchedEgg在与getHachedEggCount相同的语境中声明。在JavaScript中,函数始终可以访问创建它的语境。这被称为closure 闭包


练习

更改在Bird函数中声明weight的方式,让它成为一个私有变量。然后,创建一个返回weight的值方法getWeight

  • weight属性应该是一个私有变量。
  • 你的代码应该在Bird中创建一个方法getWeight,它返回weight
function Bird() {
this.weight = 15;


}

答案

方法描述
function()是一个可以被其他代码或其自身调用的代码片段,或者是一个指向该函数的变量 。
Javascript构造函数函数名第一个字母大写。
new创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
let声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。
this当前执行代码的环境对象
() =>箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。
闭包闭包就是能够读取其他函数内部变量的函数。
function Bird() {
    let weight = 15;
    this.getWeight = () => weight;
}
let duck = new Bird();
duck.getWeight();

 

运行结果

15

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值