[英]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>
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
,函數或對象,以及g
和w
之間的差異是什么?
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.