这玩意是期待好久,终于要回归到了久违的感觉。我们先撸完es6的class,再来重温es5的类。
面向对象开发三巨头:封装、多态、继承。在后端语言中这是天天得念叨的,只是js真的好像不怎么说起,似乎真的是没有这几个概念。或许是js对这几个概念处理太过于自由,有太多的办法来展现,所以就有那么一点儿不在意。或许是我使用js只是在非常简单的功能,自己内功不行。下面回归es6的class,不过虽然es6加上了class,还是缺少了接口,面向抽象开发好像在js还是有些不可行。
先来讲几个概念:面向对象、封装、多态、继承、重载。
1、面向对象:任何物体都是一个独立对象,任何物体都可划分到自己的分类。这与物与类聚,人以群分多少有相似的感觉。面向对象就是将所有的概念或者物体抽象成不同的类,然后以类为基础进行属性与行为的封装。最后将各行为个体以类为单位进行生成,一般都是以new 关键字来进行生成对象。最后将各个不同的对象进行有机组合,形成系统。
2、封装:在面向对象思想中,封装是以一个类做基础框架的,封装是在类中进行的,封装就是对一个个类的属性、行为有机表示(当然也可以通过继承得来),以形成类的灵魂。
3、多态:多态就是对象的生成可以有多种形式,这种多是基于继承的基础之上。使用专业的口头语就是父类对象指向子类地址。
4、重载:一个类中的相同行为的入参不同。
5、重写:子类对象对继承来的方法注入自己的逻辑,覆盖了父类的逻辑。
以上的概念是我对C#语言的面向对象的理解,希望es6 对这些概念不要有颠覆概念。
撸码之前,我们先提几个问题:
1、es6基于class如何new 对象的?
2、es6基于class如何继承的?
3、es6是否能够同时继承多个类?
4、es6是否有多态,如何表示?
5、es6是否重载?
6、es6是否可以重写?
7、es6 原型链是如何的?
如果解决了上面几个问题,es6的基于class的面向对象开发就到味了。废话少说,撸起。
1、类的封装及实例创建
/*****
* 工程师类
*/
class Engineer{
/***
* 构造函数
*/
constructor(name){
this.name = name;
}
/****
* 不能使用let、const、var 等修饰符
*/
work="";
/***
* 心态好,永远18岁
*/
age = 18;
/****
* 介绍我的名字,不能在前面加function
*/
introduce(){
console.log(`myName is:${
this.name}`);
console.log(`myWork is:${
this.work}`);
console.log(`age is:${
this.age}`);
}
}
//使用 new 来创建一个实例对象
let engineer = new Engineer("爱钱的大笨蛋");
engineer.introduce();//调用实体方法(函数/行为)
类名称要符合帕斯卡(Pascal)命名法,这个是开发人员的小规范。上面的代码回答了第1个问题,es6中的类可以直接 new 类模板,便可以创建一个实例对象。有一个非常重要的注意点是,变量不允许使用var、let、const来修饰,行为不允许使用function来修饰。上面的例子在实例化的时候传入了需要的变量name,其他二个属性直接在类模板中进行默认配置。
2、继承
/*****
* 工程师类
*/
class Engineer{
/***
* 构造函数
*/
constructor(name){
this.name = name;
}
/***
* 名称
*/
name="";
/****
* 不能使用let、const、var 等修饰符
*/
work="";
/***
* 心态好,永远18岁
*/
age = 18;
/***
* 使用语言列表
*/
languageArr=