这与this问题相关但不完全相同。我最近在一些浏览器上遇到了一些代码破裂的问题,因为它用装饰器包装了document.createElement,该装饰器负责管理内置函数。
在FF / Safari中,打开chrome控制台并输入document.createElement.length会产生1。
为什么?是否在另一个问题中提到了可选的类型扩展(奇怪的是,对于Webcomponents的自定义元素来说,是 Chrome (chromium)的东西)?标准对此有何说法?
更新
实际上,它(至少在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;
  }
## UPDATE 2
github issue-参见杰里米的答案。

最佳答案

您引用了is from the Polymer team's Web Components polyfill的源代码,而不是本机浏览器实现。如果您在不包含polyfill的页面中尝试使用,则会得到不同的结果(Ubuntu上的Firefox):

> document.createElement.length
1

> document.createElement.toString()
"function createElement() {
    [native code]
}"

在Chrome中获得1的原因是,由于它当前包含Web组件的本机实现(其.length仍为1),因此未使用polyfill。

在任何浏览器中,内置函数都没有.length 2。但是,createElement的规范即将更改,因此请不要依赖于此。

关于javascript - Document.createElement Arity,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36653913/

10-11 14:09