#如何列出JavaScript物件的所有方法
找出如何獲取包含JavaScript物件方法的陣列
我們可以使用 ‘Object.getOwnPropertyNames()’ 函數來獲取與物件相關聯的所有屬性名稱。
然後,我們可以過濾結果陣列,只包括那些屬性名稱是函數的。
我們可以通過使用typeof來判斷它是否為一個函數。
例如,以下是我們可能創建的實用程式函數:
getMethods = (obj) => Object.getOwnPropertyNames(obj).filter(item => typeof obj[item] === 'function')
這只列出在特定物件上定義的方法,而不是在其原型鏈中定義的任何方法。
要做到這一點,我們必須採取稍微不同的路線。我們必須首先迭代原型鏈並將所有屬性列在一個陣列中。然後,我們檢查每個單個屬性是否為函數。
為了確保在瀏覽原型鏈時不重複方法(例如始終存在的 constructor
),我們使用了一個Set數據結構,它確保值是唯一的:
const getMethods = (obj) => {
let properties = new Set()
let currentObj = obj
do {
Object.getOwnPropertyNames(currentObj).map(item => properties.add(item))
} while ((currentObj = Object.getPrototypeOf(currentObj)))
return [...properties.keys()].filter(item => typeof obj[item] === 'function')
}
使用示例:
getMethods("")
getMethods(new String('test'))
getMethods({})
getMethods(Date.prototype)