微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐