第一个是无名函数定义,第二个是有名函数定义,第三个是匿名函数定义。首先说,函数本身也是对象,它可以有自己的名字的,但这个名并不是用来唯一标识函数的,就好像你可以叫张三,别人也可以取名张三;然后再告诉你一点,标识对象都是靠“指针”(类似),函数也不例外,对于有名函数,只不过是在定义的时候自动生成了一个指针,指针名即为函数名,所以,function class2(){}其实相当于 class2 = function class2(){};对于无名函数与匿名函数,就没那么幸运,不会自动生成指针,必须自己定义,也就是说第一个第三个必须得有赋值语句支撑。constructor也是引用的一个函数对象,但这个对象并不知道有多少指针指向自己,它只有它自身的信息,在alert的时候,其实是隐式调用了其toString()方法。所以就见到你见到的结果了,不知我说清楚了没,你能看明白吧?