zoukankan      html  css  js  c++  java
  • JavaScript中的的constructor

    >

    许多JavaScript程序库中都大量用到了constructor这个函数,但是由于之前始终对此函数理解不清,进而对程序库的实现机制的理解上产生了不小的障碍。后来发现其实想要很好地理解这个constructor函数,你只需要知道它始终指向创建当前对象实例的(构造)函数就可以了。如何理解这句话呢?我们都知道,任何函数都是Function类的一个实例,那么根据上述可知:任何函数的constructor属性都指向Function类。那么Function类的constructor又指向谁呢?还是Funtion类本身,其实JavaScript内部的Function类就是一个函数对象,只不过任何函数都起始与Function类而已。这样我们就可以通过constructor属性一层一层地构成一个链,这个链可以追踪到一个对象的最原始的构造函数了,这对于在JavaScript中实现类的继承有很大的帮助。

    下面的例子演示了如何利用constructor来追踪对象最原始的构造函数:

    var base = new Function();

    // Or you can write: var base = function(){}

    var obj = new base();

    // test its parent contructor

    alert(base.constructor == Function); // output true

    alert(obj.constructor == base); // output true

    // link into the root constructor

    alert(obj.constructor.constructor == Function); // also output true

    首先,创建一个新的函数实例base,易知该实例的constructor很显然指向Function类,故当测试base.constructor==Function时为真;之后有在base函数实例的基础上创建一个对象obj,由于obj是base的一个实例故obj.constructor==base亦为真;最后一句代码也返回真,这正是利用constructor形成一个链,通过它追根溯源找到了最原始了Function类。首先obj.constructor返回的是base(上面已解释不再赘述),而base又是Function类的一个实例,故obj.contructor.constructor返回的是Function类的引用。

  • 相关阅读:
    Java vs Python
    Compiled Language vs Scripting Language
    445. Add Two Numbers II
    213. House Robber II
    198. House Robber
    276. Paint Fence
    77. Combinations
    54. Spiral Matrix
    82. Remove Duplicates from Sorted List II
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/objectorl/p/1632724.html
Copyright © 2011-2022 走看看