创建新的DOMParser实例有什么意义?

kas*_*bah 16 javascript domparser

如果你从MDN看一下DOMParser的例子:

var parser = new DOMParser();
var doc = parser.parseFromString(stringContainingXMLSource, "application/xml");
// returns a Document, but not a SVGDocument nor a HTMLDocument

parser = new DOMParser();
doc = parser.parseFromString(stringContainingXMLSource, "image/svg+xml");
// returns a SVGDocument, which also is a Document.

parser = new DOMParser();
doc = parser.parseFromString(stringContainingHTMLSource, "text/html");
// returns a HTMLDocument, which also is a Document.
Run Code Online (Sandbox Code Playgroud)

他们不断创建new DOMParser实例.但为什么?一个解析器实例不足够吗?那些进行大量解析的代码,在创建新实例方面是否具有性能优势?

编辑:人们正在挂起这个例子.更好地说出我的问题:为什么不DOMParser更喜欢JSON和它的parse方法?为什么不是 parseFromString静态方法?

Bál*_*int 2

您发布的示例只是 3 个不同的示例连接成 1 个,它们都声明了一个新的 DOMParser,因此每个示例都可以单独运行。

也许吧,但一般来说,我看到很多关于 (new DOMParser).parseFromString 的代码。

如果他们使用它(new DOMParser()).parseFromString,那是因为他们只使用它一次,并且在其他地方不需要它,因此为其创建一个单独的变量是多余的。

这段代码:

var
  proto = DOMParser.prototype
, nativeParse = proto.parseFromString
;

// Firefox/Opera/IE throw errors on unsupported types
try {
    // WebKit returns null on unsupported types
    if ((new DOMParser()).parseFromString("", "text/html")) {
        // text/html parsing is natively supported
        return;
    }
} catch (ex) {}

proto.parseFromString = function(markup, type) {
    if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
        var
          doc = document.implementation.createHTMLDocument("")
        ;
            if (markup.toLowerCase().indexOf('<!doctype') > -1) {
                doc.documentElement.innerHTML = markup;
            }
            else {
                doc.body.innerHTML = markup;
            }
        return doc;
    } else {
        return nativeParse.apply(this, arguments);
    }
};
Run Code Online (Sandbox Code Playgroud)

如果浏览器不支持该DOMParser对象,这几乎是一种故障保护。

  • 我的问题确实是:为什么设计者为 DOMParser 选择这个接口?这没有任何意义。它有一种方法,即无状态函数。 (4认同)