簡體   English   中英

什么是document.getElementById?

[英]what is document.getElementById?

考慮以下代碼:

<script>
function testFunc(){
    alert('test')
}
$(function(){
    var g = document.getElementById , w = window.testFunc ;
    //g
    alert(typeof(g));
    alert(String(g));
    alert(g instanceof Object);
    alert(g instanceof Function);
    //w
    alert(typeof(w));
    alert(String(w));
    alert(w instanceof Object);
    alert(w instanceof Function);
    //run it
    alert(g('t'));
            w();

});
</script>

現代瀏覽器(chrome,IE 9,Firefox)中的代碼行為相同。結果是:

typeof =>“功能”
String =>“function #funcName#{[native code]}”
instanceof Object => true
instanceof Function => true
這有點奇怪,我們可以通過使用()來輕松調用w ,但對於g ,我們必須像這樣調用它:

g.call(document,elementId);

說到IE 6,結果完全不同:


//G
typeof =>“對象”
String =>“function getElementById {[native code]}”
instanceof Object => false
instanceof Function => false
// w ^
typeof =>“功能”
String =>“function testFunc {alert('test')}”
instanceof Object => true
instanceof Function => true
更重要的是,我們必須使用'()'直接運行g和w,我們不能像這樣調用g:

g.call(document,'t')

這會導致錯誤。 所以這是我的問題:什么是document.getElementById ,函數或對象,以及gw之間的差異是什么?

document.getElementById是一個宿主對象,它是一個函數。 它不是在EcmaScript中定義的,而是DOM接口的一部分。

4.3.8主機對象

主機環境提供的對象,以完成ECMAScript的執行環境

由於它支持[[Call]]運算符,因此它也是一個函數。

主機對象並不總是遵循相同的規則,本地對象WRT typeof雖然部分11.4.3的EcmaScript 5的有所收緊的規則。

testFunc是一個本機對象,特別是本機函數。

4.3.6原生對象

ECMAScript實現中的對象,其語義完全由此規范定義,而不是由主機環境定義。

注意本規范中定義了標准本機對象。 一些本機對象是內置的; 其他可能是在執行ECMAScript程序的過程中構建的。

這是用戶代理實現的一個區別,在IE6和1992年之后制作的任何其他瀏覽器之間可以找到數百個之一。只要最終功能類似於規范,用戶代理如何完成功能(當然,除了性能)

查看此實施差異圖表: http//webcoder.info/reference/BrowserFiltering.script.html

那說:不支持IE6。 真的沒有(我的意思是NO)有理由擔心任何比你擔心AOL5.0本地瀏覽器等等。

如果你的底層問題是跨瀏覽器兼容性,為什么不這樣做呢

 var g = function(id) { return document.getElementById(g) };

獲得一個像getElementById一樣的保證普通的一流函數?

document.getElementById是一個函數。 IE6剛出去吃午飯。 也許如果你描述了你真正試圖解決的問題,人們可以幫助解決這個問題。

g是所有瀏覽器中的本機函數, w不是。 IE顯示不同的字符串結果,因為瀏覽器函數格式化為字符串不同,這就是為什么你不應該首先將函數轉換為字符串。

我想IE6顯示typeof本機功能object ,但它不是任何東西的情況下,因為它承認和瀏覽器作為本地函數執行。

最后並不重要 - 你永遠不需要知道document.getElementById的類型,特別是在這樣一個舊的瀏覽器中......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM