普通面对对象
- function Person(name,age){
- this.name=name;
- this.age=age;
- }
- Person.prototype..sayhello=function( ){
- console.log(this.name)
- }
- // 实例
- const p=new Person('kaivon' , 18);
- p . showName( );
- //ES6 面向对象
- class whitePerson(name,age){
- constructor:{
- this.name=name;
- this.age=age;
- } // 注意这不能写逗号
- showName( ){
- console.log(this.name)
- }
- }
- const p1=new whitePerson('kaivon' , 18);
- p1 . showName( );
class 是一个声明, 与 var,let 一样. 它的作用是声明一个类
语法
- class name[extends]{
- //class body
- }
extends 为继承, 是个可选参数
注意:
声明的类还是构造函数
不能重复声明, 会报错(相当于声明一个变量, 与 let,const 一样)
与 ES5 写的构造函数行为一致, 除了原型里方法的可枚举性以外
共享方法 (实例方法) 直接写, 它会自动放在 prototype 上
共享属性 (实例属性) 需要写在 constructor 里
共享属性和方法
1, 类里的 this 指向实例, 所以属性都放在 this 上, 一般会在 constructor 里去定义
2, 共享方法放在大括号内, 因为大括号内容的方法会最终放到 prototype 里
私有属性与方法
1,ES6 规定大括号里面只能放方法, 不能放属性,
2, 或者在类的外面添加属性,
3, 私有方法可以被其他子类继承
new . target 属性 返回构造函数(类)
1, 一般用在构造函数之中, 在 class 内部指向构造函数
2, 如果构造函数不是通过 new 命令调用的, 将返回 undefined
3, 当有继承的时候, 它放回子类
class 的方法也有私有的: 加个 static
- //get 和 post
- class Pop{
- get att( ){
- return '你获取了'
- }
- set att( ){
- console.log(` 你设置了个 ${value}`);
- }
- }
- const p1=new Pop( );
- console.log( p1.att ); // 你获取了
- p1.att='名字' ; // 你设置了个名字
来源: https://www.2cto.com/kf/201806/757431.html