SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
+	
  




        そして基礎に戻るjs#4

        2012/11/19	
  れこ
+	
  
        今回の品目

            またもやjsです	
  
                 基本的にオライリー・ジャパン「JavaScript:	
  the	
  good	
  parts」をもと
                  に書いてます。	
  



            関数の4つの呼び出しパターン+1	
  

            thisについて	
  
+	
  
        関数の呼び出しパターン

            関数は引数以外にもパラメータを受け取っている!!	
  
                 thisとargments	
  



            4つの呼び出しパターン+1	
  
                 メソッド呼び出し	
  
                 関数呼び出し	
  
                 コンストラクタ呼び出し	
  
                 apply,call呼び出し	
  
+	
  
        1,メソッド呼び出し

            関数がオブジェクトのプロパティとして格納されている場合	
  

            this	
  =	
  呼び出し元のオブジェクト	
  
+	
  
        2,関数呼び出し

            関数がオブジェクトのプロパティではない場合	
  

            this	
  =	
  グローバルオブジェクト(ブラウザならwindow)	
  

            これを使うときは要注意。
+	
  
        関数呼び出しの悲劇

            うまくいかない例(伝わりにくくてすいみません。)
+	
  
        thisがglobalになるのを回避

            var	
  that	
  =	
  this;	
  
                 thisは遅延束縛( 実行時に値が決定)が用いられるので、都度変化
                  する	
  
                 変数に入れてしまえばそのときのthisを保存しておける	
  
                 thisの退避に使う変数名はthatとするのが通例(らしい)
+	
  
        3,コンストラクタ呼び出し

            new	
  Hoge()と呼び出すやつ	
  
                 this	
  =	
  生成された新しいオブジェクト	
  

            この呼び出し方も要注意、そして非推奨。
+	
  
        コンストラクタ呼び出しの注意点

            new演算子を付けないと大惨事	
  
                 thisが返却されないので、戻り値はundefined	
  
                 thisにはグローバルオブジェクトが入る	
  
                 文法上の誤りはないのでSyntaxエラーは出ない	
  

            グローバルオブジェクトを上書きした上、戻り値は空
+	
  
        4,apply,call呼び出し

            初見だと恐ろしくトリッキー。	
  
                 Functionsオブジェクトのメソッドの2つ	
  
                 this	
  =	
  引数で指定できる
+	
  
        どういうこと!?

            callとapplyはほぼ同じ	
  
                 関数への引数の与え方と動作速度(後述)が異なる	
  
                    call  	
  :	
  第2引数以降を順に引数として渡す	
  
                    apply 	
  :	
  第2引数の配列を展開して引数として渡す	
  



            第1引数	
  
                 thisに指定したいオブジェクト	
  
                 呼び出された関数内のthisにこれが格納される	
  

            第2引数(以降)	
  
                 関数に与えたい引数	
  
+	
  
        どちらを使う?どう使う?

            applyより、callの方が動作が高速	
  
                 個人的に意味がストレートなcallの方が良い	
  
                 call	
  =	
  呼ぶ と自然な理解が出来るし。高速なら尚更。	
  



            使い道 例:auguments	
  
                 関数に自動的に与えられている値(引数が全て入っている)	
  
                 可変長引数とかに用いる。	
  
                 Arrayのようで、ArrayじゃないのでArrayのメソッドは使えない	
  

            augumentsに便利なArrayのメソッドを使いたい	
  
                 Array.prototype.slice.call(auguments,1,2);	
  
+	
  
        まとめ

            今回までの内容を使えるようになることでオブジェクトの定義
             の仕方がだいぶ綺麗になりそう。	
  

            文法的にも、構造的にも、可読性的にもスマートなコードを。	
  

            まだまだ尽きないけど、細かいjsについてはこれで一区切り	
  



            次回予告	
  
                 canvasでベジェ曲線を理解しつつ、書いてみる(未定)	
  
+	
  
        出典

            オライリー・ジャパン「Javascript:	
  the	
  good	
  parts」	
  

            applyとcallの使い方を丁寧に説明してみる -­‐	
  あと味	
  
             http://taiju.hatenablog.com/entry/20100515/1273903873	
  

            callとapplyの使い方の違いについて教えてください -­‐	
  jsdo.it	
  -­‐	
  
             Share	
  JavaScript,	
  HTML5	
  and	
  CSS	
  
             http://jsdo.it/qa/11	
  

Mais conteúdo relacionado

Mais procurados

(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミングOuka Yuka
 
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けーTanUkkii
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」Kaz Aiso
 
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftTomohiro Kumagai
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...Kaz Aiso
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいShigeru UCHIYAMA
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„Kaz Aiso
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
C++ Template Metaprogramming
C++ Template MetaprogrammingC++ Template Metaprogramming
C++ Template MetaprogrammingAkira Takahashi
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターンMoriharu Ohzu
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Takashi Hoshino
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用までyoshihikoozaki5
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftTomohiro Kumagai
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6TanUkkii
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】株式会社ランチェスター
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?Kenji Nakamura
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らないdigitalghost
 

Mais procurados (20)

(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けープログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
プログラミング言語のパラダイムシフトーScalaから見る関数型と並列性時代の幕開けー
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第5回 「配列 と レコード 」
 
プロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswiftプロトコル指向 - 夢と現実の狭間 #cswift
プロトコル指向 - 夢と現実の狭間 #cswift
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第4回 「Function と Pro...
 
メタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しいメタプログラミングRubyはこの付録が美味しい
メタプログラミングRubyはこの付録が美味しい
 
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
【DELPHI / C++BUILDER STARTER チュートリアルシリーズ】 シーズン2 Delphi の部 第2回 ‟変数と型„
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
C++ Template Metaprogramming
C++ Template MetaprogrammingC++ Template Metaprogramming
C++ Template Metaprogramming
 
クロージャデザインパターン
クロージャデザインパターンクロージャデザインパターン
クロージャデザインパターン
 
Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4Effective Modern C++ 勉強会#1 Item3,4
Effective Modern C++ 勉強会#1 Item3,4
 
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用までTemplate Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
 
これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6これからのJavaScriptー関数型プログラミングとECMAScript6
これからのJavaScriptー関数型プログラミングとECMAScript6
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
ちょっと詳しくJavaScript 第4回【スコープとクロージャ】
 
What is template
What is templateWhat is template
What is template
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
 

Destaque

HTML5クイズ!
HTML5クイズ!HTML5クイズ!
HTML5クイズ!yoshikawa_t
 
kagami_comput2015_4
kagami_comput2015_4kagami_comput2015_4
kagami_comput2015_4swkagami
 
JavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめJavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめYossy Taka
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
kagami_comput2016_12
kagami_comput2016_12kagami_comput2016_12
kagami_comput2016_12swkagami
 
kagami_comput2016_13
kagami_comput2016_13kagami_comput2016_13
kagami_comput2016_13swkagami
 
kagami_comput2015_12
kagami_comput2015_12kagami_comput2015_12
kagami_comput2015_12swkagami
 
kagami_comput2016_03
kagami_comput2016_03kagami_comput2016_03
kagami_comput2016_03swkagami
 
kagami_comput2016_04
kagami_comput2016_04kagami_comput2016_04
kagami_comput2016_04swkagami
 
kagami_comput2015_14
kagami_comput2015_14kagami_comput2015_14
kagami_comput2015_14swkagami
 
kagami_comput2015_13
kagami_comput2015_13kagami_comput2015_13
kagami_comput2015_13swkagami
 
kagami_comput2016_01
kagami_comput2016_01kagami_comput2016_01
kagami_comput2016_01swkagami
 
kagami_comput2015_10
kagami_comput2015_10kagami_comput2015_10
kagami_comput2015_10swkagami
 
kagami_comput2015_11
kagami_comput2015_11kagami_comput2015_11
kagami_comput2015_11swkagami
 
kagami_comput2016_02
kagami_comput2016_02kagami_comput2016_02
kagami_comput2016_02swkagami
 
kagami_comput2015_9
kagami_comput2015_9kagami_comput2015_9
kagami_comput2015_9swkagami
 
kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14swkagami
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめYuki Ishikawa
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Yossy Taka
 

Destaque (20)

HTML5クイズ!
HTML5クイズ!HTML5クイズ!
HTML5クイズ!
 
kagami_comput2015_4
kagami_comput2015_4kagami_comput2015_4
kagami_comput2015_4
 
JavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめJavaScript 基礎文法のまとめ
JavaScript 基礎文法のまとめ
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
kagami_comput2016_12
kagami_comput2016_12kagami_comput2016_12
kagami_comput2016_12
 
kagami_comput2016_13
kagami_comput2016_13kagami_comput2016_13
kagami_comput2016_13
 
kagami_comput2015_12
kagami_comput2015_12kagami_comput2015_12
kagami_comput2015_12
 
kagami_comput2016_03
kagami_comput2016_03kagami_comput2016_03
kagami_comput2016_03
 
kagami_comput2016_04
kagami_comput2016_04kagami_comput2016_04
kagami_comput2016_04
 
kagami_comput2015_14
kagami_comput2015_14kagami_comput2015_14
kagami_comput2015_14
 
kagami_comput2015_13
kagami_comput2015_13kagami_comput2015_13
kagami_comput2015_13
 
kagami_comput2016_01
kagami_comput2016_01kagami_comput2016_01
kagami_comput2016_01
 
kagami_comput2015_10
kagami_comput2015_10kagami_comput2015_10
kagami_comput2015_10
 
kagami_comput2015_11
kagami_comput2015_11kagami_comput2015_11
kagami_comput2015_11
 
kagami_comput2016_02
kagami_comput2016_02kagami_comput2016_02
kagami_comput2016_02
 
kagami_comput2015_9
kagami_comput2015_9kagami_comput2015_9
kagami_comput2015_9
 
kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14
 
JavaScriptことはじめ
JavaScriptことはじめJavaScriptことはじめ
JavaScriptことはじめ
 
Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語Webの仕組みとプログラミング言語
Webの仕組みとプログラミング言語
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 

Semelhante a そしてjsの基礎へ戻る#4

JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタートShumpei Shiraishi
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章Narimichi Takamura
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門masatora atarashi
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)Nobuhiro Sue
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門Makoto Fukuhara
 
「Lispインタープリター」勉強会 2014.12.04
「Lispインタープリター」勉強会 2014.12.04「Lispインタープリター」勉強会 2014.12.04
「Lispインタープリター」勉強会 2014.12.04Minoru Chikamune
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Nextdynamis
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723龍一 田中
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数Altech Takeno
 
Java8 lambdas chapter1_2
Java8 lambdas chapter1_2Java8 lambdas chapter1_2
Java8 lambdas chapter1_2yo0824
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
Web講座 第8回
Web講座 第8回Web講座 第8回
Web講座 第8回nanametown
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7Tetsuya Morimoto
 

Semelhante a そしてjsの基礎へ戻る#4 (20)

JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 1 章
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)G*workshop sendai 20100424(v2)
G*workshop sendai 20100424(v2)
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門
 
「Lispインタープリター」勉強会 2014.12.04
「Lispインタープリター」勉強会 2014.12.04「Lispインタープリター」勉強会 2014.12.04
「Lispインタープリター」勉強会 2014.12.04
 
Kanazawa.js.Next
Kanazawa.js.NextKanazawa.js.Next
Kanazawa.js.Next
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数
 
Java8 lambdas chapter1_2
Java8 lambdas chapter1_2Java8 lambdas chapter1_2
Java8 lambdas chapter1_2
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
Web講座 第8回
Web講座 第8回Web講座 第8回
Web講座 第8回
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
 
R spec勉強会
R spec勉強会R spec勉強会
R spec勉強会
 

Mais de Shingo Inoue

Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーするLt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーするShingo Inoue
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたShingo Inoue
 
コードゴルフ 〜今日から始める難読コードの世界〜
コードゴルフ 〜今日から始める難読コードの世界〜コードゴルフ 〜今日から始める難読コードの世界〜
コードゴルフ 〜今日から始める難読コードの世界〜Shingo Inoue
 
さらなるjsの深みへ#3
さらなるjsの深みへ#3さらなるjsの深みへ#3
さらなるjsの深みへ#3Shingo Inoue
 
LTって、何の略だっけ。1
LTって、何の略だっけ。1LTって、何の略だっけ。1
LTって、何の略だっけ。1Shingo Inoue
 
わかる LT@2
わかる LT@2わかる LT@2
わかる LT@2Shingo Inoue
 

Mais de Shingo Inoue (7)

Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーするLt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
 
LT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきたLT#7 Hello coffeeしてきた
LT#7 Hello coffeeしてきた
 
LT#6 Taskete
LT#6 TasketeLT#6 Taskete
LT#6 Taskete
 
コードゴルフ 〜今日から始める難読コードの世界〜
コードゴルフ 〜今日から始める難読コードの世界〜コードゴルフ 〜今日から始める難読コードの世界〜
コードゴルフ 〜今日から始める難読コードの世界〜
 
さらなるjsの深みへ#3
さらなるjsの深みへ#3さらなるjsの深みへ#3
さらなるjsの深みへ#3
 
LTって、何の略だっけ。1
LTって、何の略だっけ。1LTって、何の略だっけ。1
LTって、何の略だっけ。1
 
わかる LT@2
わかる LT@2わかる LT@2
わかる LT@2
 

Último

The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 

Último (6)

The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 

そしてjsの基礎へ戻る#4

  • 1. +   そして基礎に戻るjs#4 2012/11/19  れこ
  • 2. +   今回の品目   またもやjsです     基本的にオライリー・ジャパン「JavaScript:  the  good  parts」をもと に書いてます。     関数の4つの呼び出しパターン+1     thisについて  
  • 3. +   関数の呼び出しパターン   関数は引数以外にもパラメータを受け取っている!!     thisとargments     4つの呼び出しパターン+1     メソッド呼び出し     関数呼び出し     コンストラクタ呼び出し     apply,call呼び出し  
  • 4. +   1,メソッド呼び出し   関数がオブジェクトのプロパティとして格納されている場合     this  =  呼び出し元のオブジェクト  
  • 5. +   2,関数呼び出し   関数がオブジェクトのプロパティではない場合     this  =  グローバルオブジェクト(ブラウザならwindow)     これを使うときは要注意。
  • 6. +   関数呼び出しの悲劇   うまくいかない例(伝わりにくくてすいみません。)
  • 7. +   thisがglobalになるのを回避   var  that  =  this;     thisは遅延束縛( 実行時に値が決定)が用いられるので、都度変化 する     変数に入れてしまえばそのときのthisを保存しておける     thisの退避に使う変数名はthatとするのが通例(らしい)
  • 8. +   3,コンストラクタ呼び出し   new  Hoge()と呼び出すやつ     this  =  生成された新しいオブジェクト     この呼び出し方も要注意、そして非推奨。
  • 9. +   コンストラクタ呼び出しの注意点   new演算子を付けないと大惨事     thisが返却されないので、戻り値はundefined     thisにはグローバルオブジェクトが入る     文法上の誤りはないのでSyntaxエラーは出ない     グローバルオブジェクトを上書きした上、戻り値は空
  • 10. +   4,apply,call呼び出し   初見だと恐ろしくトリッキー。     Functionsオブジェクトのメソッドの2つ     this  =  引数で指定できる
  • 11. +   どういうこと!?   callとapplyはほぼ同じ     関数への引数の与え方と動作速度(後述)が異なる     call  :  第2引数以降を順に引数として渡す     apply  :  第2引数の配列を展開して引数として渡す     第1引数     thisに指定したいオブジェクト     呼び出された関数内のthisにこれが格納される     第2引数(以降)     関数に与えたい引数  
  • 12. +   どちらを使う?どう使う?   applyより、callの方が動作が高速     個人的に意味がストレートなcallの方が良い     call  =  呼ぶ と自然な理解が出来るし。高速なら尚更。     使い道 例:auguments     関数に自動的に与えられている値(引数が全て入っている)     可変長引数とかに用いる。     Arrayのようで、ArrayじゃないのでArrayのメソッドは使えない     augumentsに便利なArrayのメソッドを使いたい     Array.prototype.slice.call(auguments,1,2);  
  • 13. +   まとめ   今回までの内容を使えるようになることでオブジェクトの定義 の仕方がだいぶ綺麗になりそう。     文法的にも、構造的にも、可読性的にもスマートなコードを。     まだまだ尽きないけど、細かいjsについてはこれで一区切り     次回予告     canvasでベジェ曲線を理解しつつ、書いてみる(未定)  
  • 14. +   出典   オライリー・ジャパン「Javascript:  the  good  parts」     applyとcallの使い方を丁寧に説明してみる -­‐  あと味   http://taiju.hatenablog.com/entry/20100515/1273903873     callとapplyの使い方の違いについて教えてください -­‐  jsdo.it  -­‐   Share  JavaScript,  HTML5  and  CSS   http://jsdo.it/qa/11