6、封装
面向对象的特点:
封装、继承和多态
1.封装
- 对象就是一个用来存储不同属性的容器
- 对象不仅存储属性,还要负责数据的安全
- 直接添加到对象中的属性,并不安全,因为它们可以被任意的修改
如何确保数据的安全:
1.私有化数据- 将需要保护的数据设置为私有,只能在类内部使用
2.提供setter和getter方法来开放对数据的操作 属性设置私有,通过getter setter方法操作属性带来的好处
- 可以控制属性的读写权限
- 可以在方法中对属性的值进行验证
- 将需要保护的数据设置为私有,只能在类内部使用
- 封装主要用来保证数据的安全
实现封装的方式:
1.属性私有化 加#
2.通过getter和setter方法来操作属性get 属性名(){ return this.#属性 }
set 属性名(参数){
this.#属性 = 参数
}
<script>
class Person {
#address = '花果山'// 实例使用#开头就变成了私有属性,私有属性只能在类内部访问
#name
#age
#gender
constructor(name,age,gender){
this.#name = name
this.#age = age
this.#gender = gender
}
sayHello(){
console.log(this.#name)
}
//getter方法,用来读取属性
getName(){
return this.#name
}
// setter方法,用来设置属性
setName(){
this.#name = name
}
getAge(){
return this.#age
}
setAge(age){
if(age >= 0){
this.#age = age
}
}
get gender(){
return this.#gender
}
set gender(gender){
this.#gender = gender
}
}
const p1 = new Person("孙悟空", 18, "男")
// p1.age = "hello"
// p1.getName()
p1.setAge(-11) // p1.age = 11 p1.age
// p1.setName('猪八戒')
p1.gender = "女"
console.log(p1.gender)
</script>