如何在javascript中找到命名空间构造函数的函数名?

Kei*_*rup 3 javascript constructor namespaces

例如,比较这两个:

function Person(name) {
 this.name = name;
}
var john = new Person('John');
console.log(john.constructor);
// outputs: Person(name)

var MyJSLib = {
 Person : function (name) {
   this.name = name;
 }
}
var john2 = new MyJSLib.Person('John');
console.log(john2.constructor);
// outputs: function()
Run Code Online (Sandbox Code Playgroud)

第一种形式对于在运行时调试很有用.第二种形式需要一些额外的步骤来确定你拥有什么样的对象.

我知道我可以编写一个描述性的toString函数或者在构造函数上调用toSource方法来获取更多信息,但我想要最简单的方法.

有没有办法做到这一点?建议?

CMS*_*CMS 6

好吧,这是因为你使用的是匿名函数.

你可以指定匿名函数的名称(是的,听起来很奇怪),你可以:

var MyJSLib = {
 Person : function Person (name) {
   this.name = name;
 }
}
var john2 = new MyJSLib.Person('John');
console.log(john2.constructor);
Run Code Online (Sandbox Code Playgroud)

可以命名匿名函数,但这些名称仅在函数本身中可见,并且由于您使用new运算符,因此将设置构造函数属性,并且您将能够看到名称.

您还可以使用或不使用函数名称来比较构造函数引用:

console.log(john2.constructor === MyJSLib.Person); // true
Run Code Online (Sandbox Code Playgroud)