[英]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;
}
这是一个很好的资源,可以帮助您入门。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.