JavaScript-封装性
局部变量和局部函数
- 无论是 ES6 之前还是 ES6,只要定义一个函数就会开启一个新的作用域
- 只要在这个新的作用域中,通过
let/var
定义的变量就是局部变量
- 只要在这个新的作用域中,定义的函数就是局部函数
什么是对象的私有变量和函数
- 默认情况下对象中的属性和方法都是公有的,只要拿到对象就能操作对象的属性和方法
- 外界不能直接访问的变量和函数就是私有变量和私有函数
- 构造函数的本质也是一个函数,所以也会开启一个新的作用域,所以在构造函数中定义的变量和函数就是私有变量和私有函数
什么是封装
- 封装性就是隐藏实现细节,仅对外公开接口
为什么要封装
- 不封装的缺点,当一个类把自己的成员变量暴露给外部的时候,那么该类就失去对属性的管理权,别人可以任意的修改你的属性
- 封装就是将数据隐藏起来,只能用此类的方法才可以读取或者设置数据,不可被外部任意修改,封装是面向对象设计本质(将变化隔离)这样降低了数据被误用的可能(提高安全性和灵活性)
那么本文就不举反例,直接上正例,代码如下所示,想年龄这种变量是不可能存在负数的,所以可以使用封装来进行限制和过滤如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript-封装性</title>
<script>
function Person() {
this.name = "BNTang";
let age = 34;
this.setAge = function (myAge) {
if (myAge >= 0) {
age = myAge;
}
}
this.getAge = function () {
return age;
}
this.say = function () {
console.log("hello world");
}
}
let obj = new Person();
obj.setAge(-3);
console.log(obj.getAge());
</script>
</head>
<body>
</body>
</html>