JavaScript+获取对象/函数名称

JavaScript + Get object / function name

本文关键字:函数 获取 取对象 JavaScript+      更新时间:2023-09-26

我正在用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中获取?

感谢

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"