zoukankan      html  css  js  c++  java
  • 关于组合式继承和寄生式继承的个人理解

    ---恢复内容开始---

      这是我第一次在博客园认真写博客,也是第一次认真写技术博客,发表下个人见解,望大家不吝赐教!

      首先介绍下js的继承。很多OO语言,如C#,都支持接口继承和实现继承。但是由于在js中,函数是没有签名的(没有签名也导致了js中没有重载的概念。原因简单的说,就是函数的签名是存在一个数组Argument中的),所以js只支持实现继承。而js的继承主要依靠原型链(ps:摘抄《Javascript高级程序设计》)

      简单说下原型链。原型链的实现方式,在于把对象a 的prototype属性指向一个对象b。这样,a对象就继承了b对象。

    换句话说,a对象是b对象的子类。如果b对象的prototype又指向一个对象c,那么a、b、c、Object这些实例和原型组成的链条,就是原型链。所有对象的终极父类,又叫超类,都是Object。简单代码如下:

     1   function A() {
     2             this.a = "a";
     3         }
     4         A.prototype = new B();           //这里要注意,这是new B(),不是B
     5         A.prototype.constructor = A;      //如果这里不指定,这里将指向超类。因为继承重写了constructor属性
     6         function B() {
     7             this.b = "b";
     8         }
     9         
    10         var instance = new A();
    View Code

    用Chrome跟踪,可以看到这样的关系,如下图:

    从图中,我们可以看到,A的prototype属性已经指向了B对象的实例,B对象中又有b成员。constructor因为经过重新指向了A,所以这里看到的constructor是A。这个属性是指向构造函数的。这个时候,A对象就继承了B对象的所有属性。而在B对象中,我们又可以看到这样属性等。这里,B对象的prototype指向的Object。也就是说B对象的父类,是Object。

  • 相关阅读:
    JQuery Ajax动态生成表格
    简单模拟JQuery框架
    事务和锁学习
    Js面向对象和数据类型内存分配
    Spring.Net学习 控制反转(IoC)和面向切面编程(AOP)
    html <pre>标签
    裸眼3D
    sysobjects syscolumns和SysTypes笔记
    JQuery EasyUi练习Demo(带源码)
    Oracle 游标使用大全
  • 原文地址:https://www.cnblogs.com/drafire/p/5389098.html
Copyright © 2011-2022 走看看