前回エントリー分の続きです.
PatchServiceではJavaScriptのロガーとして
を使っています.
このlog4jsってのは結構高機能で便利なのですが,内部でObject.prototype.extendを新たに追加して使用しているためにfor-in構文を使っているとよろしくない挙動を示します.そこで今回はソースを修正してObject汚染をしないように変更してみようと思います.(ソース読んだら思いのほか簡単だたw)
Object.prototype.extend = function(object) { return Object.extend.apply(this, [this, object]); };
prototype.jsを使っている人は
Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destination; };
も冗長なので消しても良いかも.prototype.jsの内部で書いているextendとまったく同じみたいです.
そんでもってソース中にある以下のextendを使っている部分を検索して
Log4js.ConsoleAppender.prototype = (new Log4js.Appender()).extend( {
後半部分を
Log4js.ConsoleAppender.prototype = Object.extend(new Log4js.Appender(),{
に変更.
ちなみにextend使っていて書き換えないといけない箇所は10以上あるっぽいので単純作業ですが,がんばって書き換えましょう.よ~するにObject.prototype.extendで定義して使っていたものをObject.extendを使うように書き換えるだけです(゚∀゚)
以上,でObject汚染を回避して問題なく使えるはず!たぶん・・・.十分なテストはしていないのですが,extendで検索して漏れなく書き換えてさえいれば特に問題も出ないんじゃないでしょうか.そもそもこれだけのことにObject.prototypeを書き換えるなYO!って話ですね(´・ω・`)
以上,そんな感じで.バグ等あればご一報いただけるとうれしいです.
でわでわ.