我正在尝试弄清楚如何为dataset制作填充,我想我需要使用get和set来定义函数。尝试将它们添加到Element.prototype
时,get / set的语法如何? MDN上的示例显示了一个局部变量,但是如何使用它们添加到Element.prototype
?
Object.defineProperty {Element.prototype, "dataset",
get: function() { /* return value */ }
, set: function(newVal) { /* set somehow w/ setAttribute or jQuery */ }
}
我想将getter / setter方法路由到$.attr()上面的示例我只是将它们与.data()或(更好)本地setAttribute
和{{1}相关联}。
有一个polyfill for dataset here但它只支持符合标准的浏览器(不是IE8或更低版本)。我想做一个避免使用getAttribute
(我认为这是IE8中的问题)。我认为defineProperty可能是合适的方法,我可以使用ES5 Shim来填充。我将如何使用defineProperty来执行此操作?
答案 0 :(得分:2)
是的,Object.defineProperty
可用。我made such a polyfill基于Eli Gray的原始版本,通过避免全局/非标准原型覆盖以及与CamelCasing正常工作(以及利用其缺少defineProperty
支持的Xccessors polyfill)来增强一点点。
更新:虽然在这种情况下对你没有关系,但我可能会提到defineProperty
polyfill只能在DOM对象的IE8中使用。它在IE8之前不起作用,因为在此之前不能覆盖DOM原型 - 除非你真的想要弄脏你的手build your own,但是彻底地完成它将是一项艰巨的任务。此外,dataset
polyfills(我的和原始的)目前只能以polyfill,标准友好的方式使用 来读取Element.prototype.getAttribute()
的属性并从那里开始工作。 Element.prototype.getAttribute
还需要填充以确保它获得最新的数据集更新版本等。