__proto__使ってprototypeを汚染せずに拡張する
(function() { var R = window.R = function(selection) { return R.init(selection); }; R = { init: function(selection) { this.__proto__ = selection ? selection.getRangeAt(0) : document.createRange(); return this; }, start: function(node, index) { this.setStart(node, index || 0); return this; }, end: function(node, index) { this.setEnd(node, index || 0); return this; }, sel: function(node) { this.selectNode(node); return this; }, wrap: function(elem) { this.surroundContents(elem); return this; } }; })();
__proto__へRangeオブジェクト登録したので、RからネイティブなRengeメソッド呼べる。
Rangeのprototypeへ追加せずに、Rangeオブジェクトに独自関数追加できた!
正確には
独自メソッドを持つオブジェクトにRangeメソッドを追加できた。
問題点
IE対応が遠退いたw
Selectionオブジェクトの有無でRangeオブジェクトを切り替えたいんだけれど、どうしたもんやら。