簡體   English   中英

Document.createElement arity

[英]Document.createElement arity

這與問題有關但不完全相同。 我最近有一些代碼在幾個瀏覽器上破解了,因為它包含了一個帶有裝飾器的document.createElement ,該裝飾器調整了內置函數。

打開chrome控制台並輸入document.createElement.length ,在FF / Safari中產生1,2。

為什么? 它是另一個問題中提到的可選類型擴展(奇怪的是,對於webcomponents的自定義元素,這是一個chrom(ium)的東西)? 標准對此有何看法?

UPDATE

確實(至少在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.

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