Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
YT
Uploaded by
Yukiko Tamiya
PDF, PPTX
449 views
JSの基本的なことをちょっと掘り下げてみる話シリーズ Chapter04. 〜 prototype編(やっと..!) 〜
We Are JavaScripters! :)) 6th @21cafe 登壇資料です
Engineering
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 104
2
/ 104
3
/ 104
4
/ 104
5
/ 104
6
/ 104
7
/ 104
8
/ 104
9
/ 104
10
/ 104
11
/ 104
12
/ 104
13
/ 104
14
/ 104
15
/ 104
16
/ 104
17
/ 104
18
/ 104
19
/ 104
20
/ 104
21
/ 104
22
/ 104
23
/ 104
24
/ 104
25
/ 104
26
/ 104
27
/ 104
28
/ 104
29
/ 104
30
/ 104
31
/ 104
32
/ 104
33
/ 104
34
/ 104
35
/ 104
36
/ 104
37
/ 104
38
/ 104
39
/ 104
40
/ 104
41
/ 104
42
/ 104
43
/ 104
44
/ 104
45
/ 104
46
/ 104
47
/ 104
48
/ 104
49
/ 104
50
/ 104
51
/ 104
52
/ 104
53
/ 104
54
/ 104
55
/ 104
56
/ 104
57
/ 104
58
/ 104
59
/ 104
60
/ 104
61
/ 104
62
/ 104
63
/ 104
64
/ 104
65
/ 104
66
/ 104
67
/ 104
68
/ 104
69
/ 104
70
/ 104
71
/ 104
72
/ 104
73
/ 104
74
/ 104
75
/ 104
76
/ 104
77
/ 104
78
/ 104
79
/ 104
80
/ 104
81
/ 104
82
/ 104
83
/ 104
84
/ 104
85
/ 104
86
/ 104
87
/ 104
88
/ 104
89
/ 104
90
/ 104
91
/ 104
92
/ 104
93
/ 104
94
/ 104
95
/ 104
96
/ 104
97
/ 104
98
/ 104
99
/ 104
100
/ 104
101
/ 104
102
/ 104
103
/ 104
104
/ 104
More Related Content
PDF
Prototypeベース in JavaScript
by
Ryo Maruyama
PDF
知って得するWebで便利なpostgre sqlの3つの機能
by
Soudai Sone
PDF
JSの基本的なことをちょっと掘り下げてみる話シリーズ Chapter03. 〜 prototype?編 〜
by
Yukiko Tamiya
PDF
最強オブジェクト指向言語 JavaScript 再入門!
by
Yuji Nojima
PDF
Javascripでオブジェクト指向
by
1000 VICKY
PPT
20090121 J QueryからはじめるJava Script~初級編~
by
Hiromu Shioya
PPTX
Javascript勉強会資料1
by
Kenji Kaneko
PPTX
Javascript3
by
Kiminari Homma
Prototypeベース in JavaScript
by
Ryo Maruyama
知って得するWebで便利なpostgre sqlの3つの機能
by
Soudai Sone
JSの基本的なことをちょっと掘り下げてみる話シリーズ Chapter03. 〜 prototype?編 〜
by
Yukiko Tamiya
最強オブジェクト指向言語 JavaScript 再入門!
by
Yuji Nojima
Javascripでオブジェクト指向
by
1000 VICKY
20090121 J QueryからはじめるJava Script~初級編~
by
Hiromu Shioya
Javascript勉強会資料1
by
Kenji Kaneko
Javascript3
by
Kiminari Homma
Similar to JSの基本的なことをちょっと掘り下げてみる話シリーズ Chapter04. 〜 prototype編(やっと..!) 〜
PDF
JSer Class #1
by
mizuky fujitani
KEY
いまさらJavaScript
by
Naomichi Yamakita
PDF
ちょっと詳しくJavaScript 第3回【prototype】
by
株式会社ランチェスター
PPT
[A 3]SSJSでも使える!Javascriptでオブジェクト指向プログラミング入門
by
Kazunori Tatsuki
PPTX
Javascriptのデザインパターン【勉強会資料】
by
株式会社キャッチアップ
PPTX
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
by
Shumpei Shiraishi
PDF
JSクラス定義
by
Wataru Nakaseko
PDF
JavaScript入門
by
Ryo Maruyama
PDF
クライアントサイドjavascript簡単紹介
by
しくみ製作所
PPTX
TypeScriptをオススメする理由
by
Yusuke Naka
PDF
お手軽Ajaxアプリケーションの作り方
by
Shunji Konishi
PDF
モダンJavaScript環境構築一歩目
by
大樹 小倉
PPTX
Chotto Dive into Object of JavaScript
by
Youta Ogura
PDF
JavaScript.Next
by
dynamis
ODP
webを飾る技術
by
ina job
PDF
【フロントエンド勉強会】 フロントエンド基礎知識
by
Sota Takahashi
PDF
Objective Front-End JavaScript
by
Muyuu Fujita
PDF
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
by
Masahiro Wakame
PDF
JSer Class #3
by
mizuky fujitani
PDF
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
by
schoowebcampus
JSer Class #1
by
mizuky fujitani
いまさらJavaScript
by
Naomichi Yamakita
ちょっと詳しくJavaScript 第3回【prototype】
by
株式会社ランチェスター
[A 3]SSJSでも使える!Javascriptでオブジェクト指向プログラミング入門
by
Kazunori Tatsuki
Javascriptのデザインパターン【勉強会資料】
by
株式会社キャッチアップ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
by
Shumpei Shiraishi
JSクラス定義
by
Wataru Nakaseko
JavaScript入門
by
Ryo Maruyama
クライアントサイドjavascript簡単紹介
by
しくみ製作所
TypeScriptをオススメする理由
by
Yusuke Naka
お手軽Ajaxアプリケーションの作り方
by
Shunji Konishi
モダンJavaScript環境構築一歩目
by
大樹 小倉
Chotto Dive into Object of JavaScript
by
Youta Ogura
JavaScript.Next
by
dynamis
webを飾る技術
by
ina job
【フロントエンド勉強会】 フロントエンド基礎知識
by
Sota Takahashi
Objective Front-End JavaScript
by
Muyuu Fujita
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
by
Masahiro Wakame
JSer Class #3
by
mizuky fujitani
Webデザインの幅を広げる、jQuery【コードを記述する】 先生:保坂 庸介
by
schoowebcampus
JSの基本的なことをちょっと掘り下げてみる話シリーズ Chapter04. 〜 prototype編(やっと..!) 〜
1.
JSの基本的なことをちょっと 掘り下げてみる話シリーズ Chapter04. ~ prototype編(やっと..!)
~ We Are JavaScripters! :)) 6th @21cafe
2.
聴衆ターゲット JSはまだほとんどかいたことがない→× JSをかいていて、動くんだけど 何でそうなるのかよくわかっていない→○ 言語仕様を深く理解している方→×
3.
ベースに している本▷ オライリー 開眼!JavaScript JS に慣れてきた人に オススメの一冊!
4.
とてもお世話になりました。m(__)m http://qiita.com/howdy39/items/35729490b024ca295d6c
5.
前回までの復習 (2ヶ月前でごめんなさい。。)
6.
JavaScriptは プロトタイプベースの オブジェクト指向言語 である
7.
引用:MDN https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Details_of_the_Object_Model クラスベースとプロトタイプベースの比較
8.
引用:MDN https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Details_of_the_Object_Model 前回話したところ
9.
オブジェクトの生成方法 (コンストラクタ関数) と、 JSに存在するオブジェクトの 全体像のお話をしました
10.
コンストラクタ関数まとめ 普段使っているネイティブオブジェクトは すべてコンストラクタ関数から生成されて いる new演算子を使わなければただの関数 new演算子を使うと、 1.thisにオブジェクト生成&returnを行う 2.prototype継承が行われる(※今回話すところ)
11.
9つのネイティブオブジェクトのコンストラクタ Number() String() Boolean() Object() Array() Function() Date() RegExp() Error() ※Math はコンストラクタではなく 静的オブジェクト
12.
プリミティブ値はオブジェクトではない null, undefined, “文字列”,
10, true, falseは オブジェクトではなくプリミティブ型。 ただし、nullとundefinedをのぞくプリミティブ値は、一時的 にオブジェクトに変換されオブジェクトのようにふるまう オブジェクトという言葉において、 JavaScriptオブジェクトとObject()は別物 ・Array()オブジェクト ・Object()オブジェクト JSの世界はすべてオブジェクト?
13.
詳細が気になる人はslideshareをチェック! https://www.slideshare.net/YukikoTamiya/js-chapter03- prototype
14.
引用:MDN https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Details_of_the_Object_Model 今回話すところ
15.
??
16.
INDEX 謎のオブジェクト__proto__ アクセスの仕組み (プロトタイプチェーン) prototypeはなぜ存在するのか?
17.
謎のオブジェクト __proto__
18.
※var arr1 =
Array() var arr1 = []; と同じ
22.
__proto__ ってなんだ??
23.
Array() new Array() インスタンス化 arr1 __proto__ length:0 謎のオブジェクト ?
24.
__proto__の中身から探る
25.
__proto__の中身から探る MDNより
26.
__proto__の中身から探る MDNより
27.
__proto__の中身から探る MDNより
28.
Array() new Array() インスタンス化 arr1 __proto__ length:0 Array.prototype join() push() concat() … prototype
29.
__proto__ Function()のインスタンスを生成する際に 自動的に付与するオブジェクト ※関数をコンストラクタとして使用するかどうかに関わ らず、自動的に生成される コンストラクタ関数でprototypeプロパティ に定義したものと同値 ※__proto__は非標準でしたが、ECMAScript 2015で初めて標準化されました。
30.
オリジナルの コンストラクタ関数で 挙動をCheck!
33.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト]
34.
アクセスの仕組み (プロトタイプチェーン)
35.
pushメソッドを呼んでみる
36.
pushメソッドを呼んでみる
37.
pushメソッドを呼んでみる
38.
pushメソッドを呼んでみる 呼べた(そりゃそうか)
39.
あれ、でも普段__proto__なんて使わない…
40.
あれ、でも普段__proto__なんて使わない…
41.
あれ、でも普段__proto__なんて使わない…
42.
あれ、でも普段__proto__なんて使わない… どうして呼べるの??
43.
プロトタイプチェーン ①そのオブジェクトにプロパティがあるか調べる
44.
プロトタイプチェーン ①そのオブジェクトにプロパティがあるか調べる あった そのプロパティ を返す
45.
プロトタイプチェーン ①そのオブジェクトにプロパティがあるか調べる ②__proto__をたどって プロパティがあるか調べる あった そのプロパティ を返す ない
46.
プロトタイプチェーン ①そのオブジェクトにプロパティがあるか調べる ②__proto__をたどって プロパティがあるか調べる あった あった そのプロパティ を返す ない
47.
プロトタイプチェーン ①そのオブジェクトにプロパティがあるか調べる ②__proto__をたどって プロパティがあるか調べる あった あった そのプロパティ を返す ない ③さらに上の階層の__proto__ を見に行く(ループ)
48.
プロトタイプチェーン ①そのオブジェクトにプロパティがあるか調べる ②__proto__をたどって プロパティがあるか調べる あった あった そのプロパティ を返す ない ③さらに上の階層の__proto__ を見に行く(ループ) ④nullになるまで行う (終着点は必ずObject.prototype)
49.
実際にプロパティを 探す動きを追ってみよう (Personコンストラクタの例)
50.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト]
51.
実際にプロパティを 探す動きを追ってみよう 1.tami.name 2.tami.getName 3.tami.hogehoge
52.
1. tami.name
53.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] 1. tami.name ❶tamiを探す window
54.
※windowオブジェクト グローバルオブジェクトとも呼ばれる JavaScriptによって裏で設定されている Webブラウザ環境でJavaScriptのコードをかく には、windowオブジェクト内で実行する必要 がある
55.
※windowオブジェクト グローバルオブジェクトとも呼ばれる JavaScriptによって裏で設定されている Webブラウザ環境でJavaScriptのコードをかく には、windowオブジェクト内で実行する必要 がある
56.
windowオブジェクト グローバルオブジェクトとも呼ばれる すべてのJavaScriptの実装環境は単一の グローバルオブジェクトを持たなければならない Webブラウザ環境でJavaScriptのコードをかくに は、windowオブジェクト内で実行する必要がある
57.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] 1. tami.name ❶tamiを探す window
58.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] 1. tami.name ❶tamiを探す window あった!
59.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] 1. tami.name ❷nameを探す window
60.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] 1. tami.name ❷nameを探す window あった!
61.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] 1. tami.name ❷nameを探す window あった!
62.
2. tami.getName
63.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] 2. tami.getName ❶tamiを探す window あった!
64.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] ❷getNameを探す window 2. tami.getName
65.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] ❷getNameを探す window ない… 2. tami.getName
66.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] ❸__proto__を探す window 2. tami.getName
67.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] ❸__proto__を探す window あった! 2. tami.getName
68.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] ❹getNameを探す window getName() 2. tami.getName
69.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] ❹getNameを探す window getName() あった! 2. tami.getName
70.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] ❹getNameを探す window getName() あった! 2. tami.getName
71.
3. tami.hogehoge
72.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] 3. tami.hogehoge ❶tamiを探す window あった!
73.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] ❷hogehogeを探す window ない… 3. tami.hogehoge
74.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] getName() prototype name age tami [オブジェクト] ❸__proto__を探す window あった! 3. tami.hogehoge
75.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] ❹hogehogeを探す window getName() 3. tami.hogehoge
76.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] ❹hogehogeを探す window getName() 3. tami.hogehoge ない…
77.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] window getName() 3. tami.hogehoge __proto__ これなんの __proto__? ❺tami.__proto__.__proto__を探す
78.
tami.__proto__.__proto__ Object.prototypeのようだ
79.
※__proto__の中の constructorプロパティについて インスタンスを生成した コンストラクタ関数を 参照することができます
80.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] window getName() 3. tami.hogehoge __proto__ これなんの __proto__? ❺tami.__proto__.__proto__を探す
81.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] window getName() 3. tami.hogehoge __proto__ Object() [関数] prototype Object.prototype [オブジェクト] ❻hogehogeを探す
82.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] window getName() 3. tami.hogehoge __proto__ Object() [関数] prototype Object.prototype [オブジェクト] ❻hogehogeを探す ない…
83.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] window getName() 3. tami.hogehoge __proto__ Object() [関数] prototype Object.prototype [オブジェクト] ❼__proto__を探す
84.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] window getName() 3. tami.hogehoge __proto__ Object() [関数] prototype Object.prototype [オブジェクト] ❽nullを見つけて終了 __proto__:nullnull
85.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] window getName() 3. tami.hogehoge __proto__ Object() [関数] prototype Object.prototype [オブジェクト] ❽nullを見つけて終了 __proto__:nullnull
86.
Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami [オブジェクト] window getName() 3. tami.hogehoge __proto__ Object() [関数] prototype Object.prototype [オブジェクト] ❽nullを見つけて終了 __proto__:nullnull
87.
プロトタイプチェーン ①そのオブジェクトにプロパティがあるか調べる ②__proto__をたどって プロパティがあるか調べる あった あった そのプロパティ を返す ない ③さらに上の階層の__proto__ を見に行く(ループ) ④nullになるまで行う (終着点は必ずObject.prototype)
88.
なぜこのような仕組みがあるのか?
89.
なぜprototypeなのか? プロトタイプによる継承を行うことにより、 同じメソッドを共有する、効率的なオブジェ クトインスタンスを生成することができる 引用: 開眼JavaScript
90.
なぜprototypeなのか? Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami01 getName() getBirth()
91.
なぜprototypeなのか? Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami01 getName() tami02 tami03 tami04 getBirth()
92.
なぜprototypeなのか? Person() [関数] new Person(“tami”,20) インスタンス化 __proto__ getAge() Person.prototype
[オブジェクト] prototype name age tami01 getName() tami02 tami03 tami04 getBirth()
93.
Arrayを改めてながめてみる
94.
Arrayを改めてながめてみる
95.
Arrayを改めてながめてみる
96.
Array() new Array() インスタンス化 myArray __proto__ length:0 Array.prototype join() push() concat() … prototype isArray
97.
Arrayを改めてながめてみる
98.
Arrayを改めてながめてみる
99.
Array() new Array() インスタンス化 myArray __proto__ length:0 Array.prototype join() push() concat() … prototype isArray
100.
Arrayを改めてながめてみる
101.
Array() new Array() インスタンス化 myArray __proto__ length:0 Array.prototype join() push() concat() … prototype isArray
102.
prototypeまとめ 謎のオブジェクト__proto__は、 プロトタイプチェーンをたどるための プロパティだった ネイティブオブジェクトは prototypeの仕組みを使ってメソッドにアク セスしている
103.
みなさんのJSライフの 理解の一助になれば幸いです!
104.
ありがとうございました!
Download