1

我试图弄清楚如何为数据集制作一个 polyfill 我想我需要使用getset来定义函数。尝试将它们添加到时,get/set 的语法将如何Element.prototype?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()或(更好)本机setAttributegetAttribute. 这里有一个用于数据集的 polyfill,但它只支持符合标准的浏览器(不是 IE8 或更低版本)。我想做一个避免使用的__defineGetter__(我认为这是 IE8 中的问题)。我认为defineProperty可能是合适的方法,我可以使用ES5 Shim来填充它。我将如何使用defineProperty来做到这一点?

4

1 回答 1

2

是的,Object.defineProperty在可用的地方工作。我已经根据 Eli Grey 的原作制作了这样一个 polyfill,通过避免全局/非标准原型覆盖以及与 CamelCasing 正常工作(并在defineProperty缺乏支持的情况下使用他的 Xccessors polyfill)来增强一点。

更新:虽然在这种情况下对你来说并不重要,但我可能会提到definePropertypolyfill 只能在 DOM 对象上的 IE8 中工作。在 IE8 之前它不会起作用,因为在那之前无法覆盖 DOM 原型——除非你真的想亲自动手并构建自己的,但彻底完成它将是一项艰巨的任务。此外,datasetpolyfills(我的和原始的)目前只能以 polyfill、标准友好的方式工作,以从那里读取属性Element.prototype.getAttribute()并从那里工作。Element.prototype.getAttribute还需要 polyfill 以确保它获得最新的数据集更新版本等。

于 2012-11-17T06:29:23.493 回答