zoukankan      html  css  js  c++  java
  • 一张图道尽Javascript的原型继承

    h

    这幅图揭示了JS中原型继承的关系:

    1. JS中对象在创建时,它的默认的原型属性为其构造函数的prototype属性。那构造函数的prototype属性又是从哪来的呢?往下看

    2. JS中函数在定义时会自动的被添加一个prototype属性,该属性的值是一个对象,且该对象只有一个属性,该属性的值指回到该构造函数。即

     1 //定义构造函数
     2 function Foo() {}
     3 
     4 Foo.prototype = {
     5     constructor : <<reference to Foo>>    
     6 }
     7 
     8 //创建对象
     9 var obj = new Foo();
    10 
    11 //当我们访问对象的constructor属性时
    12 //获得的值其实就是构造函数的prototype的constructor属性的值
    13 obj.constructor === Foo.prototype.constructor    //true

    3. JS中函数也是对象,所以所有函数的原型指向的是函数的构造函数的prototype属性。函数的构造函数指的就是图中最下面的那个Function函数,它是JS中所有函数的构造函数(包括它自己)。从图中可以看到对象的的构造函数Object,其原型也是指向Function.prototype的。

    4. 函数的prototype属性是一个对象,而对象都是有原型的,所以prototype的原型是构造函数Object的prototype属性。问题来了,Object.prototype也是一个对象,那它的原型又是什么?跟前面一样也是Object.prototype吗,那这不成了死循环了吗?而且我们知道在查找对象的属性时会沿着原型链进行查找,如果前面原型的继承出现死循环,那对象属性的查找岂不会导致死循环?所以,Object.prototype虽然是个对象,但是其原型指向的是null(如图所示)。

  • 相关阅读:
    【转载】Unity的内存管理与性能优化
    [转载]有关placement new
    国内外有用的课程资源
    os模块批量重命名多个工作簿
    利用xlwings将一个工作表,拆成多个工作簿
    利用xlwings批量打开同一文件夹下的N多EXCEL表格
    回归初心,探索真我写在2022年的开始
    利用xlwings在多个工作簿中批量新增工作表
    今日份试题,关于Python办公自动化应用
    随想
  • 原文地址:https://www.cnblogs.com/ykt8465279130/p/2576834.html
Copyright © 2011-2022 走看看