読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

任意の値のプロパティとプロトタイププロパティを取り出す

ウェブアプリでエディタを作っていて、自動補完を実装するために、プロパティを抽出するコードを書きました。

propertyList = (value) ->
    switch typeof value
        when 'string' then Object.getOwnPropertyNames value.__proto__
        when 'undefined' then []
        else
            object = new Object value # 基本タイプをラッパークラスのインスタンスに変換
            if object instanceof Array
                Object.getOwnPropertyNames(Object.getPrototypeOf object)
            else
                Object.getOwnPropertyNames(Object.getPrototypeOf object).concat Object.getOwnPropertyNames(object)

(記述はCoffeeScriptです。)
長らくJavaScriptでは組込みメソッドを取り出せないと思っていたので、ちょっと感激しました。