ネイティブオブジェクトのAPIキー/タイプをコンソールに出力できますが、Uncaught TypeError:Illegal invocation(...)エラーが発生します。Uncaught TypeError:不正な呼び出し(...)ネイティブオブジェクトをループするとき
プロパティのいくつかはgetterとsetterを使って作成され、typeof obj [keys [i]]を実行しているときにコンテキストから関数を呼び出しているので問題だと思います。
function keys_vals(obj) {
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
console.log(keys[i], typeof obj[keys[i]]);
}
}
サンプル実行は
key_vals(Node.prototype)
---------------------------
ELEMENT_NODE 1 number
ATTRIBUTE_NODE 2 number
TEXT_NODE 3 number
CDATA_SECTION_NODE 4 number
ENTITY_REFERENCE_NODE 5 number
ENTITY_NODE 6 number
PROCESSING_INSTRUCTION_NODE 7 number
COMMENT_NODE 8 number
DOCUMENT_NODE 9 number
DOCUMENT_TYPE_NODE 10 number
DOCUMENT_FRAGMENT_NODE 11 number
NOTATION_NODE 12 number
DOCUMENT_POSITION_DISCONNECTED 1 number
DOCUMENT_POSITION_PRECEDING 2 number
DOCUMENT_POSITION_FOLLOWING 4 number
DOCUMENT_POSITION_CONTAINS 8 number
DOCUMENT_POSITION_CONTAINED_BY 16 number
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC 32 number
Uncaught TypeError: Illegal invocation(…)
を引き起こすキーを与えますあなたのケースでは、NodeType以外のインスタンスがエラーをスローします。 –