要点:1.类class 2.getter 和 setter
一、类class
1.在ES6之前,JavaScript 不能像其它语言 (PHP,java)等有完整的类支持
2.我们采用了原型链实现了面向对象的功能,但从ES6开始,提供了真正的类语法
3.当然,虽然说是真的类语法,而本质上内部实现和原型链还是不一样的
// 创建一个类 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] 举报,一经查实,本站将立刻删除。