zoukankan      html  css  js  c++  java
  • JS 之继承

    ECMAScript继承是通过原型链来继承的。基本思想是利用原型来让一个引用类型继承另一个引用类型的属性和方法,使原型变为另一个对象的实例。通过原型链实现继承时,不能使用对象字面量创建原型方法,避免重写原型链。

    原型链继承的问题

    1.原型中的引用类型的值都会被共享。

    2.在创建子类型的实例时,无法在不影响所有对象实例的情况下,向超类型的构造函数传递参数。意思是如果向超类型的构造函数传递参数,则会影响到所有该对象的实例。

    借用构造函数

    为解决上面的问题,可以使用借用构造函数的概念,思想是在子类型构造函数的内部调用超类型构造函数。使用apply或call方法。这种方式的缺点是无法实现方法的复用。

    组合继承

    比较有效的方式是结合原型链继承与构造函数继承。思路是使用原型链继承原型的属性和方法,借用构造函数(apply或call方法)继承实例属性。这样,即通过原型上定义方法来实现函数复用,又能保证每个实例都有自己独立的属性。

    原型式继承

    eg:

    function object(o){

      function F(){};

      F.prototype = o;

      return new F();

    }

    寄生式继承

    eg:

    function aobject(o){

      var clone = object(o);   //创建一个新对象,这个对象的原型属性是o

      clone.method = function(){   //给对象添加方法来增强对象

        alert('aa');

      }

      return clone;    //返回这个新对象

    }

    寄生组合式继承

    思路是借用构造函数来继承属性,通过原型链混成方式来继承方法,也就是子类型的原型继承超类型的原型方法和属性。

    eg:

    function inheritPrototype(subtype,supertype){

      var prototype = object(super.prototype);    // 创建超类型原型的一个副本

      prototype.constructor = subtype;       //给副本添加construtor属性,弥补因重写原型而失去的默认的constructor属性

      subtype.prototype = prototype;     //将新创建的副本赋值给子类型的原型

    }

    使用组合式继承是最有效的方法。

    总结自:《javascript 高级程序设计》

  • 相关阅读:
    打开App显示文件已损坏,打不开,您应该将它移到废纸篓,怎么办?
    Mac下制作openwrt U盘启动盘
    iOS 修改打包后的.ipa应用名字
    使用Aria2+Aria2Ng+OneIndex+OneDrive建立不限流量/离线BT下载/在线观看网盘/在线存储分享平台
    使用微软易升安装纯净版win10
    Mac 配置adb环境变量(为了开Appium)亲测
    CocoaPods 安装及使用(亲测有效)
    1.6 MySQL 基础教程
    Rhythmk 一步一步学 JAVA (19) JAVA IO 文件常用操作
    Rhythmk 一步一步学 JAVA (18) Axis2 创建 WebService
  • 原文地址:https://www.cnblogs.com/zourong/p/4785943.html
Copyright © 2011-2022 走看看