给定一个事件的属性,该属性将以浏览器为前缀,我想创建一个 polyfill 使其看起来没有前缀。
例如,接口FooEvent
有一个属性webkitBar
,我想让它看起来就像bar
这样,处理程序可以写成onFoo = function(e) { console.log(e.bar); }
我最初的笨拙猜测是在原型中注入一些东西FooEvent.prototype.getBar = function() { return this.webkitBar; }
。但是,我不确定如何。
给定一个事件的属性,该属性将以浏览器为前缀,我想创建一个 polyfill 使其看起来没有前缀。
例如,接口FooEvent
有一个属性webkitBar
,我想让它看起来就像bar
这样,处理程序可以写成onFoo = function(e) { console.log(e.bar); }
我最初的笨拙猜测是在原型中注入一些东西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;
}
这是帮助您入门的好资源。