2011-11-15 32 views
3

給定一個事件的屬性,這個事件會被瀏覽器作爲前綴,我想創建一個使其看起來沒有前綴的polyfill。如何在JavaScript中填充屬性?

E.g.接口FooEvent有,我想做出出現只是bar使處理器可以寫成onFoo = function(e) { console.log(e.bar); }

我笨拙的初始猜測被注入到東西原型FooEvent.prototype.getBar = function() { return this.webkitBar; }屬性webkitBar。但是,我不確定如何。

回答

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

你可以註冊一個「第一」處理的事件做了改造:

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