JS中对象的特征:封装(函数)

面向对象的特征
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  游泳

 

posted @ 2018-06-10 21:59  爱吃鱼的猫#  阅读(1295)  评论(0编辑  收藏  举报