我正在使用JavaScript构建应用。此应用程序与第三方库集成。该库定义了一个这样的对象:
getLibrary().SomeObject = function() {
function SomeObject(attrs) {
this.id = attrs.id;
this.description = attrs.description || '';
this.result = {
id: this.id,
description: this.description,
};
}
SomeObject.prototype.doSomething = function(actual) {
return 'do something';
};
SomeObject.prototype.calculate = function() {
return 42;
};
return SomeObject;
};
我在一个名为myInstance
的变量中有一个这个对象的实例。当我执行console.log(myInstance)
时,我会在Chrome控制台窗口中看到以下内容:
v SomeObject
id: '1'
description: 'my description'
> result: Object
我正在努力获得" SomeObject"部分来自上方。我试过了:
if (myInstance instanceof SomeObject) {
...
}
然而,这并没有奏效。我基本上试图得到"类型"的名称。 (或功能?)。我如何从myInstance
得到它?
由于
答案 0 :(得分:0)
getLibrary().SomeObject
不是构造函数,它是返回构造函数的函数。因此,要使用它,您可以执行以下操作:
var SomeObject = getLibrary().SomeObject();
// Note --------------------------------^^
... 调用它以获取它返回的构造函数。
然后,如果您使用它来创建实例:
var myInstance = new SomeObject({id:"some_id"});
... instanceof
将正常运作:
console.log(myInstance instanceof SomeObject); // true
直播示例:
var library = {};
function getLibrary() {
return library;
}
getLibrary().SomeObject = function() {
function SomeObject(attrs) {
this.id = attrs.id;
this.description = attrs.description || '';
this.result = {
id: this.id,
description: this.description,
};
}
SomeObject.prototype.doSomething = function(actual) {
return 'do something';
};
SomeObject.prototype.calculate = function() {
return 42;
};
return SomeObject;
};
var SomeObject = getLibrary().SomeObject();
var myInstance = new SomeObject({id: "myid"});
document.body.innerHTML = myInstance instanceof SomeObject;

如果你想知道创建myInstance
的功能(可能),如果没有任何事情搞砸SomeObject.prototype
(正如他们常规做的那样),你可以从myInstance.constructor
获得它。从ES2015开始,您可以从name
属性中获取该函数的名称,并且多个浏览器已经支持多年,尽管它们最近才被标准化。所以(在兼容的浏览器上):
console.log(myInstance.constructor.name); // "SomeObject"