zoukankan      html  css  js  c++  java
  • javascript:继承

      继承是面向对象的基本特征,其目的就是复用(无论是代码还是内存),其基本特征就是父类的方法与子类继承的方法为同一个方法

    导航

    原生的继承的方式-->模式下的继承方式-->瞎bb

    原生的继承的方式

      大神Brendan Eich设计脚本语言javascript时,认为他是一种简单的脚本语言,吸收了面向对象的方式,但没有引用类的概念(都类了,能简单吗),至于继承的概念,则通过万能的"分层"思想进行处理

    1.如何创建对象

      Java语言都使用new命令来生成实例。javascript吸收了new命令,以此从原型对象中创建新的实例,但Javascript没有"类",怎么来表示原型对象呢?大神很机智的发现,java使用new命令后跟的都是类的构造函数,因此javascript拥有构造函数却没有类的概念,而一个非常简单的设计方式就出来了

    function Dog(name){
      this.name= name;
    }

    这是一个构造函数,对构造函数使用new就可以创建一个对象,而构造函数中的this则代表其自身,就这么简单

    2.对象的继承

    创建出来的实例对象自然应该是独立,且分开的,但对于公共部分,共享才是唯一的出路,经典的分层思想就在这里,只要将共享的部分提出来,所有的实例化对象在指向共享引用就可以了,此时大神加入了prototype属性

    function Dog(name){
      this.name= name;
    }
    Dog.prototype.species="犬科";

    prototype指向的就是公共部分,Person中的this,表示的是实例中的对象,至此,javascript中的继承就已经完整的设计好了

    模式下的继承方式

    只要知道构造函数与prototype属性就已经掌握了javascript中的继承原理,不过这原理好像是创建原型以后,在创建父类的引用,缺少类概念的javascript又该如何让两个对象进行关联呢?

    function Dog(name){
      this.name= name;
    }
    function Animal(species){
        this.species=species;//"动物种类"
    }
    Animal.prototype.getSpecies=function(){
        return this.species;
    }

    大神只设计了加减法,至于乘除就没有做太深的设计,需要开发人员进行简单的配合,当然我们的目的很明确,要让子类的prototype指向父类,如果可以的话需要一种不修改2个对象的方式

    函数绑定

    类似于super的方式

    function Dog(name){
         Animal.apply(this, "犬科");
      this.name= name;
    }

    1.修改了Dog的内部对象

    prototype

    强势修改

    Dog.prototype = new Dog();    
    Dog.prototype.constructor =Dog;
  • 相关阅读:
    【CF446D】DZY Loves Games 高斯消元+矩阵乘法
    【CF542D】Superhero's Job 暴力
    【CF660E】Different Subsets For All Tuples 结论题
    【CF666C】Codeword 结论题+暴力
    【CF666E】Forensic Examination 广义后缀自动机+倍增+线段树合并
    【CF461E】Appleman and a Game 倍增floyd
    【CF471E】MUH and Lots and Lots of Segments 扫描线+并查集+线段树+set
    【CF480D】Parcels DP
    【CF497E】Subsequences Return 矩阵乘法
    SSAS 项目部署失败的问题
  • 原文地址:https://www.cnblogs.com/liuCy/p/4231956.html
Copyright © 2011-2022 走看看