ES5 类的实现
1 | function Person(name, age) { |
ES6 类的实现
ECMAScript 6 实现了 class,class 是一个语法糖,使得 js 的编码更清晰、更人性化、风格更接近面向对象的感觉;也使 IDE 、编译期类型检查器、代码风格检查器等工具更方便地检测代码语法,做静态分析。同样的,这给没有类就缺点什么的软件开发工程师一个更低的门槛去接触 js。
1 | class Person { |
new 调用
效果:class 类必须使用 new 调用,否则会报错。
1 | ES5; |
1 | ES6; |
es6 class 与 es5 的面向对象的区别:
- 写法不同,使用关键字 class 2.当 new 一个实例,默认有一个 constructor 方法,且默认返回实例对象(this),也可以返回另一对象 3.类的所有方法都在 prototype 属性上,但是不可枚举,且每方法结束不能使用分号 4.类的调用必须通过 new 一个实例,且类的内部默认使用严格模式 5.不存在变量提升,必须先声明,再调用
6.class 的 this 默认指向当前类
7.class 的静态方法,使用关键字 static,不需 new,直接通过类来调用 - 实例属性和静态属性的写法,实例属性在类的内部直接使用等式(=)写法,也可以写在 constructor 方法里,静态属性只需在实例属性前加一个关键字 static 即可 9.类的继承使用关键字 extends,继承机制与 es5 完全不同,
es5 的继承原理:先 new 子类的实例对象 this,再通过将父类的方法和属性添加到子类的 this 上(parents.call(this))。
Es6 的继承原理:先创造父类的实例对象 this,所以要构造函数 constructor()访问父类的属性使用 this,必须先调用 super()方法;再通过子类的 constructor()来修改 this
10.类的继承可以继承原生的构造函数,es5 不可以
继承
1 | class Point { |
封装
多态
- 同一个接口,在不同情况下做不一样的事情;相同的接口,不同的表现;
- 接口本身只是一组定义,实现都是子类里面;需要子类去实现的方法(子类只需重写与父类同名的方法,即可达到覆盖的效果),若子类有跟父类同名的方法,则会直接走子类的方法,不会走父类的;
- 非静态方法中,仍然子类可通过 super..方法名( )(举例:super.say( ) ),来调用父类的方法(supe 指向的事父类的原型)
重载
根据函数的参数类型,参数个数
作用:为一个函数提供了更丰富的行为
I'm so cute. Please give me money.
- Post link: https://blog.gaocaipeng.com/2019/03/11/fq8p55/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.