js面向对象特征

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:我们都知道js面向对象拥有三大特征,分别为封装、继承、多态,其实在javaScript脚本语言中是不存在多态的,但是可以用js的方式实现多态中的两种效果重载、重写,那下面我们就来说一下面向对象的特征上面的例子使用到了es6 class 语法糖内的super方法,其实它是实现了在这里指向了父类中的this对象,然后子类的构造函数再对其进行修改,然后zoo函数实现了对父类的重写,eat函数是子类新增的函数上面是一个重载的例子,它根据我们调用构造函数传入不同的参数,来实现不同的效果,其实这里也使用上面讲到了的封装

我们都知道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) {
            let data = {
                'go': function () {
                    console.log('go')
                },
                'eat': function () {
                    console.log('eat')
                },
                'sprot': function () {
                    console.log('sprot')
                }
            }
            data[callback]()
        }
    }
    
    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方法


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

设计沟通十器

设计沟通十器

Daniel M. Brown / 樊旺斌 / 机械工业出版社 / 2008-12 / 49.00元

本书提供了网站设计时所需的可交付文档资料包括:概念模型,站点地图,可用性报告等,这些文档资料是设计人员和客户进行交流的主要工具。本书深入讨论了文档推介和风险规避技巧,向你展示了如何将文档资料按要求制作成有效的交流工具。 本书内容全面,结构清晰,讲解详细。可作为网站设计人员的参考用书。 关于网站设计的多数讨论好像都着眼于流程的创建,然而,要想把概念变为现实,需要一整套强大的可交付文档资料......一起来看看 《设计沟通十器》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换