実際、document.getElementById については、それが関数であってもオブジェクトであっても、jQuery 1.6.2 でもこの問題は解決されません。
$.isFunction(g) は IE6 でも false を返します! 以下は、jQuery 1.6.2 の jQuery.isFunction の関連ソース コードです:
...
type: function( obj ) {
return obj == null ?
String( obj ) :
class2type[ Object.prototype.toString.call( obj) ] || "オブジェクト";
},
...
isFunction(obj) {
return jQuery.type(obj) === "関数"; }
そこで私は StackOverflow でこの質問を提起しました。幸いなことに、多くの善良な人々がいて、すぐに返答してくれました。最後に、参考のために簡単にまとめておきます。
document.getElementById は元々 HTMLDocument (HTML DOM) インターフェイスのメンバーとして定義されましたが、後にレベル 2 DOM の Document (XML DOM) インターフェイスに移動されました。
document.getElementById はホスト オブジェクトに属し、関数ですが、ECMAScript では定義されておらず、DOM インターフェイスの一部です。
[[Call]]をサポート(内部属性?) ホストオブジェクトのtypeofの戻り値は関数です。ホスト オブジェクトは、typeof などのネイティブ オブジェクトに関連するルールに必ずしも従うわけではないことに注意してください。
testFunc の場合、これはネイティブ オブジェクト、より具体的にはネイティブ関数です。
以下は、EcmaScript 5 の typeof 演算子の戻り結果の分類です:
|
|
Undefined
|
<strong>"undefined"</strong>
|
Null
|
<strong>"object"</strong>
|
Boolean
|
<strong>"boolean"</strong>
|
Number
|
<strong>"number"</strong>
|
String
|
<strong>"string"</strong>
|
Object (native and does not implement [[Call]])
|
<strong>"object"</strong>
|
Object (native or host and does implement [[Call]])
|
<strong>"function"</strong>
|
Object (host and does not implement [[Call]])
|
Implementation-defined except may not be <strong>"undefined"</strong> , <strong>"boolean"</strong> , <strong>"number</strong> ", or<strong> "string".</strong>
|
|
|
未定義
|
<strong>「未定義」</strong>
|
ヌル |
<strong>「オブジェクト」</strong>
|
ブール値
|
<strong>「ブール値」</strong>
|
番号 |
<strong>「番号」</strong>
|
文字列 |
<strong>「文字列」</strong>
|
オブジェクト (ネイティブで [[Call]] を実装しません) |
<strong>「オブジェクト」</strong>
|
オブジェクト (ネイティブまたはホスト、[[Call]] を実装する) |
<strong>「関数」</strong>
|
オブジェクト (ホストであり、[[Call]] を実装しません) |
実装で定義された例外は、<strong>"unknown"</strong> 、<strong>"boolean"</strong> 、「数値 」、または<strong>「文字列」。</strong>
|
TABLE>つまり、document.getElementById の代わりに $ を使用したい場合は、次のようにする必要があります: コードをコピーコードは次のとおりです: var $ = function(id) { return document.getElementById(g) }; しかし、上記の説明の後でも、私はまだ持っていますホスト オブジェクトとネイティブ オブジェクトに関する質問 新たな疑問があります。