浏览器如何从 innerHTML 属性 更新 DOM?

How browsers update DOM from innerHTML property?

我试图弄清楚当 javascript 更改 Node.innerHTML 属性 时浏览器如何执行 DOM 更新作业。

给定代码:

> var obj=document.createElement("DIV");
> obj.innerHTML='<P><SPAN>A</SPAN></P><DIV>B</DIV>';
> obj.childNodes
[<p>​<span>​A​</span>​</p>​, <div>​B​</div>​]

这对我来说似乎很神奇,因为我认为 innerHTML 是一个 属性,而不是一个函数,所以...

如何通知 javascript 字段发生变化以调用函数来更新 DOM 树?

是否有任何类型的侦听器用于在 javascript 中更改变量时调用函数,或者在执行的每个 javascript 行上只有一些守护进程监视器 Node.innerHTML 变量?

如果您想知道它为什么重要,我正在编写一个 DOM解析器,这对我来说是个问题。

使用给定的引用,我了解到浏览器引擎可能会提供类似 Object.watch (gecko) 或 Object.observe(chrome).

的方法

但是在 nodejs 中有办法做到这一点吗?

since I think that innerHTML is a property, not a function

Javascript 支持 setters。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set

在这成为语言标准本机对象(例如 DOM 节点)的一部分之前,已经在内部使用了 setter 功能。