日期:2014-05-16  浏览次数:20418 次

constructor使用的问题
这里为什么不同呢

var   class1=function(){};
var   c=new   class1();
alert(c.constructor);   //function(){};


function   class1(){};
var   c=new   class1();
alert(c.constructor);   //function   class1(){}

------解决方案--------------------
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,应该很容易理解,类似指针!
------解决方案--------------------
晕,找本 JS 经典书籍,读读 Function 对象一节自然就明白了!
------解决方案--------------------
晕,

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);
------解决方案--------------------

function class1(){}; // 这是标准函数声明的一种,class1 为函数名,当然通过 class1 可以调用该函数,同时 class1 又是函数体本身的一部分!
var c=new class1();
alert(c.constructor); //function class1(){}

很简单,出现在 function 后面的标识符就是函数名,上面的 function class1 中 class 就是函数的函数名,属于函数体的一部分。

其他两种一个属于空函数名,另一个是标准的匿名函数,空函数名的情况以前俺也没有特别注意过,不过理解起来并不难!
------解决方案--------------------
注:由于前两个存在相同的标识符,因此不可以同时运行,否则输出结果是一样的,都是 function(){}; 看来局部变量的优先级高于函数!
------解决方案--------------------
看来局部变量的优先级高于函数!///这句话是不对的,只是解释顺序不同造成的效果而已。
详细可查阅我以前的回答,我自己也找不出那个问题来了。呵呵