ようやくFunction編です。Underscore.jsの要です。
bind
_.bind(function, object, [*arguments])
bindは、関数をオブジェクトにバインドして返します。関数が呼ばれると、第2引数objectが関数の中のthisの値となります。必要に応じて予め引数を記述して関数にバインドします。これは関数型言語でいうところの部分適用(部分パラメータ化)として知られています。
_ = require 'underscore' func = (greeting)-> greeting + ', ' + this.name func = _.bind func, {name:'moe'}, 'hi' console.log func()実行結果
$ coffee bind.coffee hi, moe
bindAll
_.bindAll(object, [*methodNames])
第1引数のobjectにある複数の関数をすべてバインドしてオブジェクトを返します。第2引数で、バインドする関数を絞ることもできます。よくイベントハンドラで使われています。コンポーネントを作りたいとき便利です。
_ = require 'underscore' buttonView = label: 'underscore' onClick : ()-> console.log 'onClick: ' + this.label onHover : ()-> console.log 'onHover: ' + this.label _.bindAll(buttonView) buttonView.onClick()実行結果
$ coffee bindAll.coffee onClick: underscore
memoize
_.memoize(function, [hashFunction])
memoizeは、計算結果を得ることにより得られた関数を返します。よく計算が遅い場合に処理を高速化するのに利用されます。関数型言語の記述に似せています。
_ = require 'underscore' fibonacci = _.memoize (n)-> return n if n < 2 return fibonacci(n-1) + fibonacci(n-2) console.log fibonacci(10);実行結果
$ coffee memoize.coffee 55
delay
_.delay(function, wait, [*arguments])
delayは、setTimeout関数によく似ています。waitで指定したミリ秒後に関数functionを実行します。
_ = require 'underscore' log = _.bind console.log, console _.delay log, 1000, '1秒後のログ'実行結果
$ coffee delay.coffee 1秒後のログ
実行後、1秒後にログが表示されます。
defer
_.defer(function, [*arguments])
deferは、現在のコールスタックが空になるまでに関数を実行します。UIスレッドをブロックしないで、重い処理を走らす場合などに使います。
_ = require 'underscore' _.defer ()-> num for num in [0..1000] console.log num console.log 'こっちが先'実行結果
$ coffee defer.coffee こっちが先 1001
関連ページ
- CoffeeScriptで学ぶ Underscore.js 07(Array編)
- CoffeeScriptで学ぶ Underscore.js 06(Array編)
- CoffeeScriptで学ぶ Underscore.js 05(Collection編)
- CoffeeScriptで学ぶ Underscore.js 04(Collection編)
- CoffeeScriptで学ぶ Underscore.js 03 (Collection編)
- CoffeeScriptで学ぶ Underscore.js 02(Collection編)
- CoffeeScriptで学ぶ Underscore.js 01(Collection編)
0 件のコメント:
コメントを投稿