全进来,javascript函数出问题了?各路javascript高手.我又来了,呵呵~~~.为什么对Array构造函数有那么多的说法啊,下面是俺总结的几种人的说法:这句:alert(Array.constructor)结果是function Function(){}1.一种人认为:Array是构造函数,那么它的主构造函数就一定是Function()2.还有一种人认为:Array是构造函数,但是它会返回一个空的数组对象,用typeof(Array())可以知道.而这个空的数组对象的构造函数是这个Function()主构造函数.3.还有一种人认为Array不是构造函数,而是对象实例,为什么说是对象实例呢,因为可以这么认为:Array=new function Function(){}所以他说Array是对象实例.我去他妈的了,一个人说一个花样,妈的,到底是哪种正确,又是为什么,老子买了javscript权威指南就是有犀牛的那本和javascript高级程序设计,都没说的很清楚,我去他妈B的了,把书翻个底朝天都是避重就轻,我去他妈B的了.

解决方案 »

  1.   

    的确是很气人,不仅仅Array是这样,String 也是这样我怀疑在内置代码中Array类是这样实现的
    var _Array=function(){ [native code] }//这是真正的Array类,他拥有Array类所有的方法和属性
    var Array=function(){return _Array(arguments);}//这样就实现了Array的这种特性
    //于是我们可以通过
    var test=new Array(10);//或
    var test1=Array(10);
    //来实现这种诡异变态的现象
      

  2.   

    消消气,这东西急不来的。
    -------
    http://www.wxjjzx.com
      

  3.   

    结果是对的啊,Array.construct是Function类型,这个有错吗?
    你去看下JavaScript对函数的定义
      

  4.   

    constructor 属性
    表示创建对象的函数。 object.constructor必需的 object是对象或函数的名称。 说明
    constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 固有对象。constructor 属性保存了对构造特定对象实例的函数的引用。 例如: x = new String("Hi");
    if (x.constructor == String)
          // 进行处理(条件为真)。
    或 function MyFunc {
       // 函数体。
    }y = new MyFunc;
    if (y.constructor == MyFunc)
          // 进行处理(条件为真)。
    不要专牛角了 你去下个javascript 手册去看看啊 chm版本的
      

  5.   

    刚刚在你另外一个帖子里已经回答过this的问题了,其实已经可以根据推测出答案了。还是再说详细点:
    Array是什么东西你用typeof(Array)就清楚地看到了,没错,是函数,但是当你new Array()的时候它就是构造函数,创造出一个对象,这个对象的constructor, 比如[].construction(同new Array().constructor,又是另一种语法而已),如果用typeof来看,也是个函数,它就是当前这个数组对象的构造函数,说白了就是Array函数。不信么?试试alert([].constructor == Array);
    再说Array.constructor的问题,既然Array是函数,那其类型肯定就是Function类型,而Function类型的constructor当然是Function函数。同样的试试alert(Array.constructor == Function),证明是对的。但是要继续追究下去的话我就没法解释了:Function类型的构造函数Function函数也是函数,那么照理说它也应该是Function类型,其构造函数应该也是Function,就是自己。要说自己构造了自己,就跟某个人自己生出了自己一样,大概是穿越类的科幻小说吧……我觉得只是解释器的设计人做了手脚,让它告诉你是这样,其实Function应该是一种内部类型,有别于其他类型的一种特殊类型。
    扯远了。所以对你的三个观点:
    1.一种人认为:Array是构造函数,那么它的主构造函数就一定是Function() 
    我同意Array是构造函数,一切证据都支持这个观点。不明白你说的主构造函数指的什么2.还有一种人认为:Array是构造函数,但是它会返回一个空的数组对象,用typeof(Array())可以知道.而这个空的数组对象的构造函数是这个Function()主构造函数. 
    你可以想象某个地方定义了一个function Array() {...}。因为函数体是我们看不到的,所以返回什么都不奇怪,都有可能,所以这个观点也没错。3.还有一种人认为Array不是构造函数,而是对象实例,为什么说是对象实例呢,因为可以这么认为:Array=new function Function(){} 
    不知道要怎么说了,我没法组织语言了。上面的解释应该已经说明了这个问题,不知道我说清楚了没有。如果LZ还是没明白的话再说吧