LoginSignup
7
7

More than 5 years have passed since last update.

sugar.jsの便利な拡張メモ

Last updated at Posted at 2012-02-05

プロトタイプを拡張するもの。日本語文字列の拡張ばかりが話題になっていたが、便利なユーティリティ系も豊富。

基本的にプロトタイプを拡張する場合は、他にプロトタイプを拡張するものと競合しないことを確認し、かつ使用していることを明言すること。自分がエンドユーザーであるならば無制限に使って構わないが、プラグイン作成に混ぜるのは、それが本当に必要でない限り控えること。

定義

nodeでもクライアントでも使える。nodeの場合はnpmで。

おまじない

Object.extend()

これを呼ぶことでObjectクラスそのものをsurag.jsで定義されたObjectに拡張される。
つまり、Object.keys({a:'a'}) という呼び方が可能なのだが、{a:'a'},keys() のようにも呼べるようになる。

なお、引数としてオブジェクトを渡すと、そのクラスのみ拡張された状態になる。

Object.watch

プロパティの変更が行われると実行される関数を定義することが出来る

coffee> obj = {a:'a','b':'b'}

coffeee> Object.watch obj,'a',(prop,oldval,newval)->console.log prop,oldval,newval

coffee> obj
{ b: 'b', a: [Getter/Setter] }

coffee> obj.a = 'big brother is watching you!'
a a big brother is watching you!
'big brother is watching you!'

Object.merge

プロパティを混ぜる
どちらをベースにするかは第三引数できまる

coffee> Object.merge {a:1,b:1},{a:2,c:1}
{ a: 2, b: 1, c: 1 }
coffee> Object.merge {a:1,b:1},{a:2,c:1} ,false
{ a: 1, b: 1, c: 1 }

衝突時の挙動を関数で定義する

coffee> Object.merge {a:1,b:1},{a:2,c:1},(key,a,b)->a+b
{ a: 3, b: 1, c: 1 }

ここで紹介したのは一部。
あとで適当に書き足す

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7