我想创建一个对象,通过将元素放入对象的原型链中来扩展 HTML 元素的功能。
我想我可以用如下的方法来做到这一点:
var el = document.createElement( "div" );
el.innerHTML = "foo";
var wrapper = Object.create( el );
alert( wrapper.innerHTML );
上面的方法不起作用,而下面的方法可以:
var el = document.createElement( "div" );
el.innerHTML = "foo";
var wrapper = Object.create( el );
alert( wrapper.__proto__.innerHTML );
需要显式地查看原型内部才能找到给定的属性,这似乎很奇怪。
它不起作用,因为您正在使用.innerHTML
对象上的 getter,该对象不是本机 DOM 元素并且没有任何内部槽。
我想创建一个对象,通过将元素放入对象的原型链中来扩展 HTML 元素的功能。
这是错误的做法。要扩展元素的功能,您需要将自定义函数放入其原型链中,以便仍然可以在元素本身上调用方法。您可以使用Object.setPrototypeOf
为此,或者制作你自己的 ES6 子程序class
(并且可能将其注册为自定义元素类型 https://developer.mozilla.org/en-US/docs/Web/API/CustomElementRegistry/define).
但最好的解决方案是简单地在元素周围放置一个包装对象。还可以看看http://perfectionkills.com/whats-wrong-with-extending-the-dom/ http://perfectionkills.com/whats-wrong-with-extending-the-dom/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)