Drkcore

26 06 2011 javascript Tweet

JavaScript: The Good Parts読書会(6章,8章)

行ってきた@富士のコミュニティf

配列かどうかの判定(6.5)

タイプがobjectで且つコンストラクタがArrayであるかという判定法ではグローバルオブジェクトで作成された配列を識別できない。

そこで次のような判定の関数を定義している

var is_array = function (value) {
    return value &&
        typeof value === 'object' &&
        typeof value.length === 'number' &&
        typeof value.splice === 'function' &&
        !(value.propertyIsEnumerable('length'));
}

さて、この判定でtrueを返すような配列じゃないオブジェクトを作りたい。

読書会の時にはlengthプロパティを設定しつつ列挙不可能な状態にする方法がわからなかったが、朝プリキュアを見てたらふとプロトタイプチェーン上にlengthプロパティをおけばいいじゃんと気がついた。

var fake_ = {'length':3 };

var fake_array = {};
fake_array.__proto__ = fake_;
fake_array.splice = function() {
    return 'Hello World';
}

console.log(is_array(fake_array));

これはtrueを出力する

applyの分かりやすい適用事例(8)

  • applyとcallの使い方を丁寧に説明してみる

apply,callはthisに値を自由にセット出来るので継承に頼らなくても自由にメソッドを実行出来るということだが、実例としてはどういう場合に使われているのかという話になった。自分は再帰でつかったくらいしかなかったなあとちょっと調べてみた。

  • prototype.jsのbindメソッド
  • jQueryにおけるapply
  • DOMユーティリティ関数
  • javascript - Array.prototype.slice.apply(arguments) // 引数一発配列化

他のライブラリなんかにある便利メソッドを自分のオブジェクトでちょっと利用したいって時か、(ライブラリ開発者が)コントロールできないユーザーのオブジェクトにメソッドを注入したいとかそういう時に使うのかな。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


おやつと懇親会

おやつは杉山フルーツの生ゼリー

1309047478

懇親会はうお菜

1309047481

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021