#如何列出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)