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类的引用。

posted @ 2008-11-18 19:38  eliuhy  阅读(293)  评论(0编辑  收藏  举报