这个问题确实必须相当简单,但我不能谷歌或者解决这个问题,可能是因为99%的初学者教程涉及创建一个Person
对象,其name
属性(与该属性无关) constructor.name但污染了搜索结果。)
可以使用instance.constructor.name:
检测Object
对象的实例
var foo = new Object;
foo.constructor.name; // "Object"
如何在我自己的对象上设置构造函数名称?
var Bar = function(){};
var baz = new Bar;
baz.constructor.name // "" <- Empty string
答案 0 :(得分:10)
不是将构造函数定义为设置为匿名函数的变量Bar
,而是可以执行以下操作:
function Bar() {}
或者这个:
var Bar = function ConstructorNameHere() {};
ConstructorNameHere
名称实际上可以再次Bar
:
var Bar = function Bar() {};
(这应该适用于Chrome和FF,对IE不确定但不太有希望。)
答案 1 :(得分:3)
我想做出一个答案,以合并上面的答案和评论中的内容。
使类名起作用的最确定性的方法(尤其是在缩小之后)是在类本身上设置name
属性。 以下所有等同项:
// option 1
function MyClass() {}
MyClass.name = 'MyClass'
// option 2
class MyClass {}
MyClass.name = 'MyClass'
// option 3 (preferred)
class MyClass {
static name = 'MyClass'
}
如果您希望类名是动态的,则创建一个工厂:
function classFactory(className) {
return class {
static name = className;
}
}
const MyClass = classFactory('MyClass')
答案 2 :(得分:1)
重要警告:
如果您使用JS minifier,那么名称可能会被优化掉,突然n
变为func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject])
而不是您期望的对象名称。
如果它仅在生产中启用,则可能特别难以调试。