如果我向 的原型添加一个新属性HTMLElement
,并且其默认值为 ' {}
'(一个空对象):
Object.defineProperty(HTMLElement.prototype, 'customObject',
{ configurable: true, enumerable: true, writeable: true, value: {} });
现在我创建一个新的div
(也是一个HTMLElement
):
var e = document.createElement('div');
customObject
我为of分配了一个属性e
:
e.customObject.prop = "bla";
如果我提醒它,我会看到所需的值:
alert(e.customObject.prop); // Displays 'bla'.
现在我创建一个新的、不同的div
元素:
var d = document.createElement('div');
这d
现在应该有一个空customObject
属性,对吧?
但是,如果我提醒它:
alert (d.customObject.prop);
我得到了这个意想不到的结果:
bla
怎么来的?当我创建一个新元素时,它不应该有一个 HTMLElement.prototype 的“空白”实例吗?
(jsfiddle:http: //jsfiddle.net/5pgr38mb/)
编辑: 我正在寻找一种适用于深度克隆的解决方案( cloneNode(true))。含义 - 如果自定义对象在元素或其任何子项上具有属性,则该元素或子项将在克隆实例中保留其值(这是“本机”HTMLElement 属性的正常行为)。