var class1=function(){}; // class1 是对匿名函数的引用,真正的 constructor 还是匿名函数。
var c=new class1();
alert(c.constructor); //function(){};
function class1(){}; // class1 是真正的函数名,constructor 当然就是 class1 !
var c=new class1();
alert(c.constructor); //function class1(){}如果学过 C,应该很容易理解,类似指针!

解决方案 »

  1.   

    constructor 属性保存了对构造特定对象实例的函数的引用。第一个明明是class1();生成的
    为什么又变成function(){}; 了呢var class1=function(){};
    明明有名字class1为什么还是匿名函数呢
      

  2.   

    晕,找本 JS 经典书籍,读读 Function 对象一节自然就明白了!
      

  3.   

    我知道你说的是把函数名看成指针
    指向函数的实体问题是class1都是指向的function(){};
    如果两个class1都只是引用值为什么第一个
    第二个class1可以自己生成函数
    第一个就不可以呢
      

  4.   

    那应该可以说明两个class1的“内容”应该是不同的吧
    (否则后面相同的步骤得到的结果应该是相同的)那就奇怪了
    class1里面到底是什么东西呢
    而且
    var class3=new Function();
    var c3=new class3();
    alert(c3.constructor);
    这个也是不同的
      

  5.   

    晕,var class1=function(){}; // 应该不是标准的匿名函数,暂且称为“无名”函数,同样无法直接调用!而 class1 指向它,可以通过 class1 调用,但 class1 不是“无名”函数一部分,仅仅是引用。
    var c=new class1();
    alert(c.constructor); //function(){};
    function class1(){}; // 这是标准函数声明的一种,class1 为函数名,当然通过 class1 可以调用该函数,同时 class1 又是函数体本身的一部分!
    var c=new class1();
    alert(c.constructor); //function class1(){}var class3=new Function(); // 这个是真正的匿名函数!class3 指向它。与第一种情况类似,但又有微小差别。详细细节请参考经典书籍的解释!
    var c3=new class3();
    alert(c3.constructor);
      

  6.   

    我一直觉得class1只是一个引用值,指向函数的实体(类似指针)
    但如果按我的理解那三个class都是一样的但这里看到是不一样的
    所以我的理解至少是不完全正确class1 是函数体本身的一部分?
    这个怎么理解,怎么样的指向才是函数的一部分呢
      

  7.   


    function class1(){}; // 这是标准函数声明的一种,class1 为函数名,当然通过 class1 可以调用该函数,同时 class1 又是函数体本身的一部分!
    var c=new class1();
    alert(c.constructor); //function class1(){}很简单,出现在 function 后面的标识符就是函数名,上面的 function class1 中 class 就是函数的函数名,属于函数体的一部分。其他两种一个属于空函数名,另一个是标准的匿名函数,空函数名的情况以前俺也没有特别注意过,不过理解起来并不难!
      

  8.   

    注:由于前两个存在相同的标识符,因此不可以同时运行,否则输出结果是一样的,都是 function(){}; 看来局部变量的优先级高于函数!
      

  9.   

    还有因为js对于function class1(){};这种有个预编译的过程
    所以会出现ls的ls的情况