オーバーライド
後輩に質問されて作ったのでUPしておきます。Javaならすぐ書けるのにjavascriptだとちょっと焦りますね。一応先輩としての威厳は保てたはず。
String#toUpperCaseは単に全ての文字を大文字に変えるだけですが、引数で指定された文字だけを大文字にするようにオーバーライドしようと思います。
var originalFunc = String.prototype.toUpperCase; String.prototype.toUpperCase = function(str, flag){ return this.replace(new RegExp(str, flag), function(m){ return originalFunc.call(m); }); };
もしくは
String.prototype.originalToUpperCase = String.prototype.toUpperCase; String.prototype.toUpperCase = function(str, flag){ return this.replace(new RegExp(str, flag), function(m){ return m.originalToUpperCase(); }); };
一つ目のはクロージャで実現されているので、外部には公開されませんが、二つ目のはoriginalToUpperCaseというメソッドが外部公開されます。
なお、使い方はこんな感じ。
"getname".toUpperCase("n"); // getName "getname".toUpperCase("e"); // gEtname "getname".toUpperCase("e", "g"); // gEtnamE
※最初の例がイマイチだったので、ちょっとコードを書き換えました。