这与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 2github 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/