http://twitter.com/takanamito/status/335424369155272704
禁忌だとおもう。Objectのprototype拡張するようなモジュールはちょっと使いたくないかな、っておもっちゃうぐらい。
めんどくさいのでCoffeeで書いてみた、jsもそれっぽく書けばいいんだとおもう(適当)
たとえば、Arrayの拡張なんかはすごい簡単で
class MyArray extends Array
myNewMethod: ->
console.log "It works!"
myArray = new MyArray()
myArray.myNewMethod() #=> It works!
myArray.push "a" #=> ["a"]こんな感じでextendsすればあっさり拡張できる。で、Stringでもできるっしょ!ってやってみると
class MyString extends String
myNewMethod: ->
console.log "It works!"
myString = new String "Test"
myString.myNewMethod() #=> TypeError: String.prototype.toString is not genericてな感じでエラーが出る。で、調べてみるとESまわりのどうたらこうたらでエラるらしい。んで、どうやって書けばいいかというと
String::myNewMethod =->
console.log "It works!"
"ready".myNewMethod() #=> It works!でもコンパイルされたjsを読んでみると
// Generated by CoffeeScript 1.6.2
String.prototype.myNewMethod = function() {
return console.log("It works!");
};
"ready".myNewMethod();アカンやんけ!!!
つーわけで、少なくともStringは無理なのかもしれないのでもしかしたらjsパタン本が正しいのかもしれない。。。