繁体   English   中英

如何在JavaScript中填充属性?

[英]How do I polyfill an attribute in JavaScript?

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

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

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

仅限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);
}

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM