我们都晓得js面向对象具有三大特性,离别为封装、继续、多态,实在在javaScript脚本语言中是不存在多态的,然则能够用js的体式格局完成多态中的两种效果重载、重写,那下面我们就来讲一下面向对象的特性
封装
把笼统出的属性和对属性的要领封装在一起对外完成接口开放,说白了就是封装一个要领或是类能够传入参数,供雷同功用的外界运用,来到达雷同的目标,便于对代码的治理
代码
class Package { constructor (animal){ this.animal = animal } zoo (animal) { console.log('this is'+ this.animal) } static private () { console.log('我是私有要领') } } let newPackage = new Package('大象') newPackage.zoo() newPackage.private() // Uncaught TypeError: newPackage.private is not a function
上面的一个比较简朴的封装例子,经由过程animal参数通报来到达我们想要的效果,然则class类内里的静态要领是不会对外开放的所以会找不到这个函数
继续
继续能够使得子类具有父种别的种种属性和要领,而不需要再次编写雷同的代码。在令子种别继续父种别的同时,能够从新定义某些属性,并重写某些要领,即掩盖父种别的原有属性和要领,使其获得与父种别差别的功用。别的,为子类追加新的属性和要领也是罕见的做法。
代码
class PackageSon extends Package{ constructor(animal, food){ super(animal); this.food = food } zoo () { console.log('这是'+ this.animal) } eat () { console.log(this.animal+this.food) } } let newPackageSon = new PackageSon('大象', '吃草') newPackageSon.zoo() newPackageSon.eat()
上面的例子运用到了es6 class 语法糖内的super要领,实在它是完成了在这里指向了父类中的this对象,然后子类的组织函数再对其举行修正,然后zoo函数完成了对父类的重写,eat函数是子类新增的函数
多态
最最先我们已晓得了js严厉讲是没有多态的,多态能够表现出我们的代码的多种状况,统一操纵作用于差别的对象,能够有差别的诠释,发生差别的实行效果。
重载表现 代码
// 重载class overload { init (callback) { if (callback === 'go') { console.log('我是go') }else if(callback === 'eat') { console.log('我是eat') }else { console.log('我是sprot') } } } var newOverload = new overload() newOverload.init('go') newOverload.init('eat') newOverload.init('sprot')
上面是一个重载的例子,它依据我们挪用组织函数传入差别的参数,来完成差别的效果,实在这里也运用上面讲到了的封装,所以面向对象的特性是无处不在
重写表现 代码
// 重写class rewrite { go () { console.log('我在走路') } sport () { console.log('我在活动') } } class rewriteSon extends rewrite{ go () { console.log('我回家了') } } var newRewriteSon = new rewriteSon() newRewriteSon.go() newRewriteSon.sport()
上面是一个简朴的重写例子,我们这里用到了继续,经由过程建立rewrite父类,编写了两个函数离别完成差别的操纵,rewriteSon子类继续了父类上面的两个要领,子类中又从新写了雷同名字的go要领,所以子类会把继续过来父类中的go要领掩盖掉,从而完成本身想要的操纵,打印sport要领时会照旧得出继续父类要领的操纵,所以子类只重写了go要领