请指教javascript的constructor属性问题?
<script language="javascript">
var a=new Array();
document.write (a.constructor+"<br>");
document.write (Array.constructor);
</script>new Array()创建一个数组对象给a,那么a就是Array对象,构造函数是function Array() { [native code] }而第二句Array对象的构造函数为什么会是function Function() { [native code] }两个都是Array对象,他们的构造函数为什么会不同呢?
第二个问题:<script language="javascript">
document.write (Array().constructor)
</script>这里显示:Array()构造函数的构造函数是他本身,那么function a(){}这个自定义的函数的构造函数也应该是本身,document.write (a().constructor);为什么输出没东西?
第三个问题:
<script language="javascript">
function a(){
}
document.write (a.constructor+"<br>");
</script>Array().constructor都可以返回本身.
为什么我写a().constructor就不能返回本身啊?
我写成a.constructor返回的是function Function() { [native code] }为什么函数名a可以作为对象啊,而不是写成a()?还有a.constructor输出后为什么构造函数是function Function() { [native code] }而不是本身?

解决方案 »

  1.   

    怎么这么多怪问题啊?
    JS当初就是这么设计的!!!
    楼主的类和对象的概念是不是很强啊?
    JS是很松散的!!!
    楼主你要问下面这个是为什么,估计没有人知道。
    alert(NaN==NaN);//false
      

  2.   


    new Array()创建一个数组对象给a,那么a就是Array对象,构造函数是function Array() { [native code] } 而第二句Array对象的构造函数为什么会是function Function() { [native code] } 两个都是Array对象,他们的构造函数为什么会不同呢?function a(){}
    var b=new a;
    alert(a.constructor)             //function Function() { [native code] } 
    alert(b.constructor)             //function a() { [native code] } 
    alert(a.prototype.constructor)   //function a() { [native code] } 
      

  3.   

    "而第二句Array对象的构造函数为什么会是function Function() { [native code] } "
    在直接访问Array的时候,它只是一个函数,constructor当然是Function了第二个问题参见你的另一贴,有回复参考:constructor 属性表示创建对象的函数。object.constructor
    必需的 object是对象或函数的名称。应用于:Array Object | Boolean 对象 | Date 对象 | Function 对象 | Math 对象 | Number 对象 | Object 对象 | String 对象
      

  4.   

    <script language="javascript"> 
    document.write (Array().constructor) 
    </script> 这里显示:Array()构造函数的构造函数是他本身, 那么function a(){}这个自定义的函数的构造函数也应该是本身, document.write (a().constructor);为什么输出没东西? Array()应该是实例化对象,a()是执行,会报错的(具体为什么这样,应该跟它的机制有管吧)
    alert((Array().constructor) 与 alert((Array.constructor)比较下就知道
      

  5.   

    这本书老子有,看了,他讲的不好
    Array对象是Array()函数构造的,那他为什么又是function()函数造的?为什么Array()和function 都能造出Array对象?
      

  6.   

    根本就不是同一个东西
    alert (Array.length) //Array对象 
    alert (Array().length) //新实例
      

  7.   

    回答一:var a=new Array(); 返回一个对象而这个a是由Array创建的自然是他了Array.constructor这个就很正常了所有写的方法都是一个function
    回答二:Array().constructor这个其实跟var a=new Array(); a.constructor是一样的,因为Array()是会返回一个数组的而a().constructor是因为你这个方法里没有返回值是空的
    回答三:其实跟上面的一个意思  “为什么函数名a可以作为对象啊,而不是写成a()? ”a是指向那个方法 a()就调用了
      

  8.   

    Function对象 是JS的最顶级对象。所有的方法的实现,都是Function对象。所以,一般来说Array对象的创建函数,应该是Function。也就是说,所有的数据类型,创建者都是Function第一个问题中,一个创建,穿件对象的函数,就是Array()函数。第二个,其本身是由Function创建的,淡然就是Function函数创建了。为啥?对象不一样。第一个是一个实例,但是第二个确是一个数据的原始类型。
      

  9.   

    第二个、第三个问题好像一样吧?
    实际上就和我上面说的一样。function a(){}本身是函数,并没有进行构造,所以并没有构造函数的说。补充下上面的说法。在没有进行实例化之前,Array指向的就是其本身。就跟你没有调用程序师,这个函数并不存在,指向了默认位置一样。当然了,以上是我自己的观点。不代表真实的请跨的说