面向对象的特征
1、第一个特征:封装
1.1概念:隐藏实现细节的过程
1.2优点:重用和隐藏细节
Java里面有权限修饰符,但是JS里面没有,JS所有的属性都是公共的,为了让属性私有化,就有相应方法:
第一种:定义一个私有变量,结合get/set函数
function Student(name,age,phone){
this.name = name;//公共属性
this.age = age;//公共属性
let _phone = phone;//私有属性
this.setPhone = function(phone){
console.log("1");
_phone = phone;//设置私有属性
}
this.getPhone = function(){
console.log("2");
return _phone;//获取私有属性
}
}
let s1 = new Student("关羽",19,322);
s1.setPhone(123);//修改私有属性,因为调用了setPhone函数此时会输出1
console.log(s1.name,s1.age,s1.getPhone());
//因为调用了getPhone函数,会先输出2,再输出关羽 19 123
第二种 defineProperty方法
function Teacher(name,age,hoby){
this.name = name;
this.age = age;
this.hoby = hoby;
}
Object.defineProperty(Teacher.prototype,"name",{
set:function(name){
_name = name;
},
get:function(){
if (this.age > 30) {
return "大龄" + _name;
}
return _name;
}
})
let T1 = new Teacher("张飞",32,"游泳");
console.log(T1.name,T1.age,T1.hoby);
//输出 大龄张飞 32 游泳