ES6 22.类class实现

要点:1.类class  2.getter 和 setter

一、类class

1.在ES6之前,JavaScript 不能像其它语言 (php,java)等有完整的类支持

2.我们采用了原型链实现了面向对象的功能,但从ES6开始,提供了真正的类语法

3.当然,虽然说是真的类语法,而本质上内部实现和原型链还是不一样的

4.创建一个基本的类,并创建构造函数(构造方法):

// 创建一个类
class Person{
    // 构造函数(构造方法)
    constructor(name){
        // this.name是类的属性
        // name是构造参数赋值给属性
        this.name=name;
    }
    //普通方法
    run(){
        console.log('类的方法输出!' +this.name); //类的方法输出!Mr.Lee
    }
}
// 实例化一个Person对象
let p=new Person('Mr.Lee');
// 执行run()方法;
p.run();
// 输出对象的属性
console.log(p.name);  //Mr.Lee
// 判断p是否是Person对象
console.log(p instanceof Person);  //true
// 判断类的类型:function
console.log(typeof Person); //function

 

5.ES6除了上面的class  Person这种常规类的写法,ES6还支持表达式写法:

// NO.1
let Per=class Person{
    // 构造函数(构造方法)
    constructor(name){
        // this.name是类的属性
        // name是构造参数赋值给属性
        this.name=name;
    }
    //普通方法
    run(){
        console.log('类的方法输出!' +this.name); //类的方法输出!Mr.Lee
    }
};
// 此时new Person会报错
let p=new Per('Mr.Lee');
p.run();

// No.2
let Person=class{};

// NO.3
let p=new class {}('Mr.Lee');
p.run();

 

二、getter 和 setter

1.根据面向对象的三大定律成员属性,我们需要对它进行封装,变成私有属性

2.目前的this.name,基本是对外公开的,可以在类外取值和赋值

3.当我们假设类的属性是私有的,那么需要通过 get() 和 set() 方法实现:

// 创建一个类
class Person{
    #name;    //提案,浏览器暂不支持
    // 构造函数(构造方法)
    constructor(name){
        this.#name=name;  //私有属性,类外无法访问
    }
    get name(){
        return this.#name;  //Me.Lee  读取
    }
    set name(value){
        this.#name=value+'123';  //Mr.Wang123  赋值
    }
}
let p=new Person('Me.Lee');
p.name='Mr.Wang';
console.log(p.name);
posted @ 2021-11-28 21:17  翟莹萍  阅读(78)  评论(0编辑  收藏  举报