首頁 > web前端 > js教程 > 如何在 JavaScript 中取得物件的類別名稱?

如何在 JavaScript 中取得物件的類別名稱?

Barbara Streisand
發布: 2024-12-08 13:27:17
原創
445 人瀏覽過

How to Get the Class Name of an Object in JavaScript?

在 JavaScript 中,沒有與 Java 的「class.getName()」方法直接等效的方法來取得物件類別的名稱。

ES2015 更新:

class Foo {}
console.log(Foo.name); // "Foo"
登入後複製

對於非類別對象,「類別」可以使用 'thing.constructor.name' 屬性找到指定。

var obj = {name: "John"};
console.log(obj.constructor.name); // "Object"
登入後複製

駭客與替代方案:

雖然沒有原生的'class.getName( )' 等價,有各種hack 和替代方法來取得該類別name:

Object.prototype.getName() Hack(不建議):

此 hack 修改了對象原型並向所有對象添加了“getName()”函數對象,使它們能夠以字符串形式返回其構造函數名稱。

Object.prototype.getName = function() {
  var funcNameRegex = /function (.{1,})\(/;
  var results = funcNameRegex.exec(this.constructor.toString());
  return results && results.length > 1 ? results[1] : "";
};

var obj = {name: "John"};
console.log(obj.getName()); // "Object"
登入後複製

使用建構子屬性(有問題):

每個物件都有一個「建構子」屬性,該屬性指向建立它的建構子。

var myArray = [1, 2, 3];
console.log(myArray.constructor === Array); // true
登入後複製

但是,依賴「建構子」屬性是有問題的,因為:

  • 在繼承的情況下,它可能無法提供準確的資訊
  • 它破壞了跨框架和跨窗口。

使用instanceof(也有問題):

'instanceof'運算子也可以用於型別檢查。

var myArray = [1, 2, 3];
console.log(myArray instanceof Array); // true
登入後複製

但是, 'instanceof' 不適用於文字值,也會破壞跨框架和跨視窗。

使用 Object.prototype.toString:

Object.prototype.toString傳回物件類型的字串表示形式。

console.log(Object.prototype.toString.call('abc')); // "[object String]"
console.log(Object.prototype.toString.call(/abc/)); // "[object RegExp]"
登入後複製

雖然此方法提供了類型資訊內建類型,它為所有使用者定義類型傳回「Object」。

注意事項:

上述所有方法都有警告,且在以下情況下可能不可靠所有情況。考慮物件的建構方法,尤其是在處理繼承和匿名函數時。

以上是如何在 JavaScript 中取得物件的類別名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板