zoukankan      html  css  js  c++  java
  • <读书笔记>Javascript系列之6种继承(面向对象)

    写在前面:

    以下三选一:

    • 阅读博文JavaScript 对象详解.
    • 阅读《JavaScript权威指南》第6章。
    • 阅读《JavaScript高级程序设计》第6章。
      • 注意:只需要看“理解对象”(Understanding Objects)部分。

    6.3 继承

    • OO语言继承方式
      • 接口继承
      • 实现继承
    • ECMAScript 只支持实现继承,而且其实现继承主要是依靠原型链。

    6.3.1 原型链

    • 回顾一下构造函数、原型、实例的关系:

      • 每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。
      • 假如我们让原型对象等于另一个类型的实例,结果会怎么样呢?
        • 显然,此时的原型对象将包含一个指向另一个原型的指针,相应的,另一个原型中也包含着一个指向另一个构造函数的指针。
      • 假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链。
    • 实现原型链的基本模式

    function SuperType(){
            this.property = true;
    }
    
    SuperType.prototype.getSuperValue = function(){
        return this.property;
    };
    
    function SubType(){
        this.subproperty = false;
    }
    
    //继承了 SuperType
    SubType.prototype = new SuperType();
    
    SubType.prototype.getSubValue = function (){
        return this.subproperty;
     };
     
    var instance = new SubType();
    alert(instance.getSuperValue());  //true
    

    • 以上代码定义了两个类型: SuperType 和 SubType。
    • 每个类型分别有一个属性和一个方法。
    • 它们 的主要区别是 SubType 继承了 SuperType,而继承是通过创建 SuperType 的实例,并将该实例赋给 SubType.prototype 实现的。
    • 实现的本质是重写原型对象,代之以一个新类型的实例。
    • 换句话说,原来存在于 SuperType 的实例中的所有属性和方法,现在也存在于 SubType.prototype 中了。
    • 在确立了 继承关系之后,我们给 SubType.prototype 添加了一个方法,这样就在继承了 SuperType 的属性和方 法的基础上又添加了一个新方法。

    未完待续

  • 相关阅读:
    PIE SDK 基于Dot net bar实现比例尺控件
    PIE SDK 监督分类对话框类(SupervisedClassificaitonDialog)使用经验
    图层树右键菜单结合Command操作过程
    PIE 插件式开发小笔记__PIESDK学习体会
    [转]sqlserver收缩文件没效果的解决办法
    efcore 输出显示sql语句
    Linux 常见的进程调度算法
    Linux 配置 vimrc
    排序 选择排序&&堆排序
    C/C++ 内存管理 (《高质量C++》-- 整理笔记)
  • 原文地址:https://www.cnblogs.com/thqy39/p/5515829.html
Copyright © 2011-2022 走看看