ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ES6 22.类class实现

2021-11-28 21:33:34  阅读:155  来源: 互联网

标签:ES6 console Lee 22 Person Mr class name


要点: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);

标签:ES6,console,Lee,22,Person,Mr,class,name
来源: https://www.cnblogs.com/zyp717201/p/15616655.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有