На этот вопрос ответили. Как создавать объекты Document с помощью JavaScript
Ознакомьтесь с MDN, чтобы узнать, как https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createHTMLDocument
Новый конструктор Document () не используется таким образом.Вы можете найти причину, по которой вы получаете эту ошибку, если вы используете консоль в своем браузере ...
let doc = new Document();
doc.body;
// < null
doc.doctype;
// < null
// doc.doctype is a read only property also.
doc.__proto__;
// < Document {…}
// ‘document’ is the document the browser already created.
document.doctype;
// < “<!doctype html>“
document.__proto__;
//HTMLDocument {constructor: ƒ, Symbol(Symbol.toStringTag): "HTMLDocument"}
let body1 = doc.createElement('body');
let body = document.createElement('body');
body1.__proto__;
// Element {…}
body.__proto__;
// < HTMLBodyElement {…}
doc.body = body1;
// < Type Error: Not of type HTMLElement
// Now use the body element created by 'document'.
doc.body = body;
// Uncaught DOMException: Failed to set the 'body' property on 'Document': No document element exists.
// The body needs an document element to become a child node of.
let html = document.createElement('html');
doc.appendChild(html);
doc.body = body;
// No errors
doc.body;
// <body></body>
Как мы видим, новый конструктор Document () создает полностью пустой Document с прототипом Document,И когда вы создаете из него элементы, у этих элементов есть прототип Element.
Document, созданный браузером с именем document, имеет прототип HTMLDocument, а элементы, которые он создает, имеют прототипы HTMLElement.И это то, что ищет сеттер из doc.body.