对javascript中的构造函数感到困惑

时间:2014-03-04 10:32:44

标签: javascript constructor

如果我遗漏任何重要甚至愚蠢的事,请原谅。我正在尝试从对象中打印构造函数的名称。我遵循了两种方法。

第一种方法的代码如下,

var CF = function () {
   p1 = "";
   p2 = "";
}
var cf1 = new CF();
cf1.constructor.name

输出:

""

第二个代码,

function CF() {
   p1 = "";
   p2 = "";
}
var cf1 = new CF();
console.log(cf1.constructor.name);

输出:

CF 

我猜你已经想到了我想说的话。第一个CF对象构造函数名称为"",其中第二个输出为CF

我试图了解下面的差异

var CF = function() { }
typeof CF;
function CF() { };
typeof CF

但是没有运气他们都输出

"function"

为什么这种行为采用第一种方法?有什么区别?

(我正在使用chrome控制台)

3 个答案:

答案 0 :(得分:3)

第一个构造函数是一个匿名函数,意味着它没有名称。第二个构造函数有一个名称,允许打印它的构造函数。

答案 1 :(得分:1)

在第一种方法中,您只需创建一个名为CF的对象,该对象包含一个未命名的函数,该函数是一个类的构造函数,在该点之前是未知的。

在第二个代码中,您在名为CF的函数中编写类的构造函数,然后使用该构造函数在名为cf1的对象中创建类的实例。

我希望你理解我想说的话,基本上你的第一个构造函数没有名字。

答案 2 :(得分:0)

function CF() { };var CF = function() { }的简写,通常它们是相同的。

话虽这么说,function CF() { };在节点调试方面给你带来了一些好处,因为它允许节点对出错的地方/哪里提供更准确的反馈。