给定一个以浏览器为前缀的事件的属性,我想创建一个使其看起来没有前缀的polyfill。
E.g。界面FooEvent
有一个属性webkitBar
,我想使其显示为bar
,以便处理程序可以写为onFoo = function(e) { console.log(e.bar); }
我笨拙的初步猜测是在原型FooEvent.prototype.getBar = function() { return this.webkitBar; }
中注入一些东西。但是,我不确定如何。
答案 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)
这是一个很好的资源,可以帮助您入门。