如何在JavaScript中填充属性?

时间:2011-11-15 04:28:45

标签: javascript polyfills

给定一个以浏览器为前缀的事件的属性,我想创建一个使其看起来没有前缀的polyfill。

E.g。界面FooEvent有一个属性webkitBar,我想使其显示为bar,以便处理程序可以写为onFoo = function(e) { console.log(e.bar); }

我笨拙的初步猜测是在原型FooEvent.prototype.getBar = function() { return this.webkitBar; }中注入一些东西。但是,我不确定如何。

3 个答案:

答案 0 :(得分:4)

仅限ES5(和IE8)

Object.defineProperty(FooEvent.prototype, "bar", {
  get: function () {
    return this.webkitBar;
  },
  configurable: true
});

警告扩展主机对象。 (FooEvent是一个宿主对象)具有未知的副作用,是一个很大的未定义行为。

我建议使用静态包装器

var eventUtil = {
  getBar: function (ev) {
    return ev.webkitBar;
  }
}

function handler (e) {
  var bar = eventUtil.getBar(e);
}

答案 1 :(得分:1)

您可以为事件注册“第一个”处理程序以进行转换:

function adaptsBar(e) {
  e.bar = e.webkitBar;
}

答案 2 :(得分:0)

这是一个很好的资源,可以帮助您入门。

http://addyosmani.com/blog/writing-polyfills/