如何在Javascript中使用DOMStringMap?
我正在试验如何在Javascript中使用DOMStringMap?,javascript,prototype,Javascript,Prototype,我正在试验DOMStringMap对象,但我不明白它是如何工作的。我试图更改DOMStringMap对象的原型,但其行为异常: Object.setPrototypeOf(element.dataset,{}); // sets prototype properly element2.__proto__={}; // sets prototype to "[object Object]" in Chrome; in FireFox, nothing happens 如果我将toString方
DOMStringMap
对象,但我不明白它是如何工作的。我试图更改DOMStringMap
对象的原型,但其行为异常:
Object.setPrototypeOf(element.dataset,{}); // sets prototype properly
element2.__proto__={}; // sets prototype to "[object Object]" in Chrome; in FireFox, nothing happens
如果我将toString
方法更改为:
Object.prototype.toString=function(){
return this;
}
element3.__proto__={}; // TypeError: Cannot convert object to primitive value
DOMStringMap
似乎期望所有集合属性都是字符串,包括\uuuu proto\uuu
属性。由于并非所有浏览器都支持Object.setPrototypeOf
,因此我想找到一种方法来设置DOMStringMap
的\uuuuuu proto\uuuu
属性。有没有办法做到这一点
另外,我知道所有这些都涉及到可怕的Javascript实践,但我只是在尝试Javascript。这不会投入生产。解释
\uuuu proto\uuuu
属性可以更改内部[[Prototype]],因为它有一个setter函数,当您指定一个值时会运行该函数
但是,DOMStringMap
s有自己的setter,它与\uuuuuu proto\uuuuu
的setter相对应:
如果\uuuu proto\uuuu
的setter被隐藏,它将不会运行。因此,在DOMStringMap
实例中,您不能使用\uuuu proto\uuu
作为属性来更改[[Prototype]]
解决方案
您可以使用来访问的setter,并使用它
Object.getOwnPropertyDescriptor(Object.prototype,'.\uuu proto'.'集
.call(myDOMStringMap,{});
说明
\uuuu proto\uuuu
属性可以更改内部[[Prototype]],因为它有一个setter函数,当您指定一个值时会运行该函数
但是,DOMStringMap
s有自己的setter,它与\uuuuuu proto\uuuuu
的setter相对应:
如果\uuuu proto\uuuu
的setter被隐藏,它将不会运行。因此,在DOMStringMap
实例中,您不能使用\uuuu proto\uuu
作为属性来更改[[Prototype]]
解决方案
您可以使用来访问的setter,并使用它
Object.getOwnPropertyDescriptor(Object.prototype,'.\uuu proto'.'集
.call(myDOMStringMap,{});
说明
\uuuu proto\uuuu
属性可以更改内部[[Prototype]],因为它有一个setter函数,当您指定一个值时会运行该函数
但是,DOMStringMap
s有自己的setter,它与\uuuuuu proto\uuuuu
的setter相对应:
如果\uuuu proto\uuuu
的setter被隐藏,它将不会运行。因此,在DOMStringMap
实例中,您不能使用\uuuu proto\uuu
作为属性来更改[[Prototype]]
解决方案
您可以使用来访问的setter,并使用它
Object.getOwnPropertyDescriptor(Object.prototype,'.\uuu proto'.'集
.call(myDOMStringMap,{});
说明
\uuuu proto\uuuu
属性可以更改内部[[Prototype]],因为它有一个setter函数,当您指定一个值时会运行该函数
但是,DOMStringMap
s有自己的setter,它与\uuuuuu proto\uuuuu
的setter相对应:
如果\uuuu proto\uuuu
的setter被隐藏,它将不会运行。因此,在DOMStringMap
实例中,您不能使用\uuuu proto\uuu
作为属性来更改[[Prototype]]
解决方案
您可以使用来访问的setter,并使用它
Object.getOwnPropertyDescriptor(Object.prototype,'.\uuu proto'.'集
.call(myDOMStringMap,{});
@Linksku我不这么认为。使用这种方法来polyfillsetPrototypeOf
@Linksku我不这么认为。使用这种方法来polyfillsetPrototypeOf
@Linksku我不这么认为。使用这种方法来polyfillsetPrototypeOf
@Linksku我不这么认为。使用此方法来polyfillsetPrototypeOf
。
[OverrideBuiltins]
interface DOMStringMap {
getter DOMString (DOMString name);
setter creator void (DOMString name, DOMString value);
deleter void (DOMString name);
};