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方法来获取更多信息,但我想要最简单的方法.
有没有办法做到这一点?建议?
好吧,这是因为你使用的是匿名函数.
你可以指定匿名函数的名称(是的,听起来很奇怪),你可以:
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)