JavaScript +获取对象/函数名称

时间:2015-12-01 13:43:18

标签: javascript

我正在使用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得到它?

由于

1 个答案:

答案 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"