2012-01-31 16 views
1

私はdatasetのpolyfillを作成する方法を理解しようとしていますが、私はgetsetを使用して関数を定義する必要があると思います。 Element.prototypeに追加しようとすると、get/setの構文はどうなりますか? MDNの例ではローカル変数を示していますが、それらを使ってElement.prototypeに追加するにはどうすればよいですか?JavaScriptを使用してpolyfillにgetとsetを設定する

Object.defineProperty {Element.prototype, "dataset", 
    get: function() { /* return value */ } 
, set: function(newVal) { /* set somehow w/ setAttribute or jQuery */ } 
} 

私は$.attr()にどちらのルートgetter/setterメソッドに私はちょうど.data()または(より良い)ネイティブsetAttributegetAttributeにそれらを関連する上記の例をしたいと思います。 polyfill for dataset hereが1つありますが、標準準拠のブラウザ(IE8以下ではありません)のみをサポートしています。私は__defineGetter__の使用を避けたい(私はそれがIE8の問題だと思います)。私はdefinePropertyが適切な方法かもしれないと思うし、私はES5 Shimを使ってそれをpolyfillすることができます。これを行うにはどうすればdefinePropertyを使用しますか?

+0

https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Object/defineProperty maybe – ryanve

+0

私は ' defineProperty'は方法です。質問が更新されました。 – ryanve

答えて

2

はい、Object.definePropertyは利用可能な場合に機能します。私はmade such a polyfillをEli Grayのオリジナルに基づいています。グローバル/非標準のプロトタイプオーバーライドを避け、CamelCasingで正しく機能するように少し改善しています(definePropertyサポートが不足しているXccessors polyfillを利用しています)。

更新:それはこのケースでは、あなたのために重要ではありませんが、私はdefinePropertyポリフィルのみDOMオブジェクトにIE8で動作することを言及するかもしれません。 IE8の前にDOMプロトタイプをオーバーライドすることはできないので、あなたは手を汚したくない場合や、build your ownを手に入れたくない場合は、徹底的に行うことは巨大な作業になります。また、datasetポリフィル(鉱山と元)は、Element.prototype.getAttribute()からプロパティを読み込んでそこから作業するために、現在をpolyfillで標準的にしか扱いません。Element.prototype.getAttributeは最新のデータセットで更新されたバージョンなどを確実に取得するためにポリ充填が必要です。

関連する問題