说明
在之前的挑战中,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