例如,比较这两个:
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()
第一种形式对于在运行时调试很有用。第二种形式需要一些额外的步骤来确定你拥有什么样的物体。
我知道我可以编写一个描述性的toString函数或者在构造函数上调用toSource方法来获取更多信息,但我想要最简单的方法。
有办法做到这一点吗?建议?
答案 0 :(得分:6)
这是因为您使用的是匿名函数。
您可以指定匿名函数的名称(是的,听起来很奇怪),您可以:
var MyJSLib = {
Person : function Person (name) {
this.name = name;
}
}
var john2 = new MyJSLib.Person('John');
console.log(john2.constructor);
可以命名匿名函数,但这些名称只能显示 在函数本身内,并且由于您使用new运算符,因此将设置构造函数属性,并且您将能够看到名称。
您还可以使用或不使用函数名称来比较构造函数引用:
console.log(john2.constructor === MyJSLib.Person); // true
答案 1 :(得分:3)
如果要检查对象是否是特定类的实例,则只需使用“instanceof”关键字进行检查。如果你明确想要一个构造函数的名称(我真的看不到一点)你可以尝试下面的代码
var MyJSLib = {
Person : function Person(name) {
this.name = name;
}
}
答案 2 :(得分:-1)
你想要的是命名空间中持有者的名字。
function getName(namespace, obj) {
for name in namespace:
if (namespace[name] == obj) return name;
}
console.log(getNameOf(MyJSLib, john2.constructor));