在JavaScript 中取得物件類型的名稱
Java 提供了class.getName() 方法來擷取物件的類型,JavaScript 缺乏直接的等價物。然而,可以採用多種技術來實現類似的結果。
一種方法涉及修改物件的原型以添加getName() 函數:
Object.prototype.getName = function() { var funcNameRegex = /function (.{1,})\(/; var results = (funcNameRegex).exec((this).constructor.toString()); return (results && results.length > 1) ? results[1] : """"; };
透過此hack,所有物件都將現在有一個getName() 方法,它以字串形式傳回構造函數的名稱。
另一個選項是使用 constructor 屬性。雖然它通常適用於測試物件的類型,如下所示:
var myArray = [1,2,3]; (myArray.constructor == Array); // true
但是,有一些警告可能會破壞其可靠性,例如多重繼承或不使用「new」關鍵字建立的物件。
instanceof 運算子是另一種選擇,但它也有其限制。它不適用於文字值,需要使用正確的建構函數來建立物件。
另一種方法是使用 constructor.name 屬性,儘管它可能不適合 IE9 或更低版本。為了相容性,可以實現猴子修補程式解決方案:
if (Function.prototype.name === undefined && Object.defineProperty !== undefined) { Object.defineProperty(Function.prototype, 'name', { get: function() { var funcNameRegex = /function\s([^(]{1,})\(/; var results = (funcNameRegex).exec((this).toString()); return (results && results.length > 1) ? results[1].trim() : """"; }, set: function(value) {} }); }
最後,Object.prototype.toString可用於確定所有內建類型的類型,但它為所有內建類型傳回「Object」使用者定義的類型。
在選擇確定 JavaScript 中物件類型的方法時,了解每種方法的注意事項和限制非常重要。
以上是如何在 JavaScript 中取得物件類型的名稱?的詳細內容。更多資訊請關注PHP中文網其他相關文章!