[英]Document.createElement arity
這與此問題有關但不完全相同。 我最近有一些代碼在幾個瀏覽器上破解了,因為它包含了一個帶有裝飾器的document.createElement
,該裝飾器調整了內置函數。
打開chrome控制台並輸入document.createElement.length
,在FF / Safari中產生1,2。
為什么? 它是另一個問題中提到的可選類型擴展(奇怪的是,對於webcomponents的自定義元素,這是一個chrom(ium)的東西)? 標准對此有何看法?
確實(至少在FF中)與typeExtension相關,控制台中的document.createElement.toString()
返回
function createElement(tag, typeExtension) {
if (tag) {
tag = tag.toLowerCase();
}
if (typeExtension) {
typeExtension = typeExtension.toLowerCase();
}
var definition = getRegisteredDefinition(typeExtension || tag);
if (definition) {
if (tag == definition.tag && typeExtension == definition.is) {
return new definition.ctor();
}
if (!typeExtension && !definition.is) {
return new definition.ctor();
}
}
var element;
if (typeExtension) {
element = createElement(tag);
element.setAttribute("is", typeExtension);
return element;
}
element = domCreateElement(tag);
if (tag.indexOf("-") >= 0) {
implementPrototype(element, HTMLElement);
}
return element;
}
##更新2 github問題 - 請參閱Jeremy的回答。
您引用的源代碼來自Polymer團隊的Web Components polyfill ,而不是本機瀏覽器實現。 如果您在不包含polyfill的頁面中嘗試它,您將得到不同的結果(Ubuntu上的Firefox):
> document.createElement.length
1
> document.createElement.toString()
"function createElement() {
[native code]
}"
你的理由1
在Chrome是因為它目前包括本地實現Web組件(其中仍然有.length
為1),所以不使用填充工具。
在任何瀏覽器中,內置函數的.length
都不是.length
。 但是, createElement
的規范很快就會改變,所以不要依賴於這個仍然是真的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.