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
Uploaded by
Masafumi Oyamada
1,218 views
defjs をひも解く
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Downloaded 10 times
1
/ 25
2
/ 25
3
/ 25
4
/ 25
5
/ 25
6
/ 25
7
/ 25
8
/ 25
9
/ 25
10
/ 25
11
/ 25
12
/ 25
13
/ 25
14
/ 25
15
/ 25
16
/ 25
17
/ 25
18
/ 25
19
/ 25
20
/ 25
21
/ 25
22
/ 25
23
/ 25
24
/ 25
25
/ 25
More Related Content
PDF
よい名前を付けましょう リーダブルなんたらとか
by
よしだ あつし
PDF
DeclarativeSql
by
Takaaki Suzuki
PDF
CTF for ビギナーズ バイナリ講習資料
by
SECCON Beginners
PDF
20180123 power shell
by
Trainocate Japan, Ltd.
PDF
Teclab3
by
Eikichi Yamaguchi
PDF
Boost Tour 1.53.0
by
Akira Takahashi
PDF
Boost Tour 1.53.0 merge
by
Akira Takahashi
PDF
WordPressで投稿記事情報の取得方法
by
regret raym
よい名前を付けましょう リーダブルなんたらとか
by
よしだ あつし
DeclarativeSql
by
Takaaki Suzuki
CTF for ビギナーズ バイナリ講習資料
by
SECCON Beginners
20180123 power shell
by
Trainocate Japan, Ltd.
Teclab3
by
Eikichi Yamaguchi
Boost Tour 1.53.0
by
Akira Takahashi
Boost Tour 1.53.0 merge
by
Akira Takahashi
WordPressで投稿記事情報の取得方法
by
regret raym
Viewers also liked
PDF
ICDE 2015 Study (R24-4, R27-3)
by
Masafumi Oyamada
PDF
ES Harmony Proxy on Firefox 4
by
Masafumi Oyamada
PDF
OSC 2011 KeySnail
by
Masafumi Oyamada
PDF
Rios::Proxy - A framework for CLI
by
Masafumi Oyamada
PDF
ES.next WeakMap
by
Masafumi Oyamada
PDF
研究動向から考えるx86/x64最適化手法
by
Takeshi Yamamuro
PDF
BlinkDB 紹介
by
Masafumi Oyamada
ICDE 2015 Study (R24-4, R27-3)
by
Masafumi Oyamada
ES Harmony Proxy on Firefox 4
by
Masafumi Oyamada
OSC 2011 KeySnail
by
Masafumi Oyamada
Rios::Proxy - A framework for CLI
by
Masafumi Oyamada
ES.next WeakMap
by
Masafumi Oyamada
研究動向から考えるx86/x64最適化手法
by
Takeshi Yamamuro
BlinkDB 紹介
by
Masafumi Oyamada
Similar to defjs をひも解く
PDF
Meta programing ruby monday
by
Yuisho Takafuji
PDF
「エクストリームエンジニアへの道(Swift編)」
by
tech-arts
ODP
Rubyのコードを読んでみよう(オブジェクト編)
by
baban ba-n
PDF
BOF1-Scala02.pdf
by
Hiroshi Ono
PDF
BOF1-Scala02.pdf
by
Hiroshi Ono
PDF
BOF1-Scala02.pdf
by
Hiroshi Ono
PDF
Introduction to Spock
by
Takahiro Sugiura
PDF
Ruby紹介4(pdf)
by
Gohryuh
PPTX
Xtext&Xtend documents
by
Shintaro Hosoai
PDF
Object-oriented Programming / Exception handling
by
saireya _
PDF
Web技術勉強会 20110723
by
龍一 田中
PPTX
RubyとJavaScriptに見る第一級関数
by
Altech Takeno
Meta programing ruby monday
by
Yuisho Takafuji
「エクストリームエンジニアへの道(Swift編)」
by
tech-arts
Rubyのコードを読んでみよう(オブジェクト編)
by
baban ba-n
BOF1-Scala02.pdf
by
Hiroshi Ono
BOF1-Scala02.pdf
by
Hiroshi Ono
BOF1-Scala02.pdf
by
Hiroshi Ono
Introduction to Spock
by
Takahiro Sugiura
Ruby紹介4(pdf)
by
Gohryuh
Xtext&Xtend documents
by
Shintaro Hosoai
Object-oriented Programming / Exception handling
by
saireya _
Web技術勉強会 20110723
by
龍一 田中
RubyとJavaScriptに見る第一級関数
by
Altech Takeno
defjs をひも解く
1.
def.js をひも解く ~オレ標準 js
記法~ id:mooz @stillpedant
2.
自己紹介 • 名前 –
mooz (Hatena, GitHub, …) – stillpedant (Twitter, Google) • 好きな言語 – Mozilla 系 JavaScript • 作ったもの 近影 – KeySnail (Emacs 版 Vimperator) – MiSPLi (Lisp 処理系 in JavaScript) – その他もろもろ 詳しくは http://mooz.github.com/index-ja.html で
3.
def.js
4.
def.js • http://github.com/tobeytailor/def.js • Ruby
に似た記法でクラス定義と継承が行える
5.
サンプルコード
6.
サンプルコード
!?
7.
説明 • def (クラス名)
(定義); – クラス定義 – def ("Person") ({ … }); • def (クラス名) << 親クラス(定義); – 親クラスを指定したクラス定義 (継承) – def (“Ninja") << Person({ … }); • this._super(); – メソッド中から用いる – 親クラスの同名メソッドを呼び出し
8.
サンプルコード (再掲)
9.
今回のスライドの目的 • def.js の挙動を理解する •
def (クラス名) (定義); • def (クラス名) << 親クラス(定義); • this._super();
10.
def (クラス名) (定義);
11.
def (クラス名) (定義); •
def 関数は関数 (deferred) を返す • def(“Person”) とすると – Person クラスが作成され (window.Person が 定義される) – 「定義 (props) を使って Person クラスを拡 張する関数」が返る • つまり def(“Person”)({ … }); とすると – Person クラスが定義され, { … } を使ってその クラスが拡張される ※ “拡張” : メソッドやプロパティを定義すること
12.
def (クラス名) <<
親クラス(定義);
13.
def (クラス名) <<
親クラス(定義); • 前述の通り def 関数は関数 deferred を返す • この関数には valueOf というプロパティが設定 されている • この valueOf がミソ
14.
valueOf • オブジェクトをプリミティブ値に変換する際に
呼ばれる • プリミティブ値が期待される場面にオブジェク トが出くわしたとき自動的に呼ばれる
15.
valueOf の挙動 実行すると, 1.
def(foo) called 2. def(bar) called 3. foo (valueOf) 4. bar (valueOf)
16.
def (クラス名) <<
親クラス(定義); • def 関数は valueOf の設定された関数 deferred を返す • def (クラス名) << 親クラス(定義); とすると合 計で 3 回関数が呼ばれる def (クラス名) 親クラス(定義) dererred.valueOf (def の返り値)
17.
def(“Ninja”) << Person({
… }); def(“Ninja”) << Person({ … }); としたとき…… def(“Ninja”) 1. Ninja クラスを作成 2. deferred.valueOf を設定 3. deferred を返す def.js のコンテキスト内でグローバル _super, _props を設定 deferred Person({ … }); def(“Ninja”) の返した deferred に valueOf が 設定されているので…… 1. deferred の _super に Person を設定 2. deferred の _props に { … } を設定 deferred.valueOf 1. deferred の _props を使い Ninja クラスを拡張 2. deferred の _super を使い Ninja の親クラスを Person に設定 (Ninja に _superClass プロパティを設定する)
18.
つまりは…… • A() 演算子
B() のとき 1. A() 2. B() 3. A の返したオブジェクトの valueOf • という順番で呼ばれてくれれば何でも良い • << である必要性は無い – def(“Ninja”) >> Person({ … }); – def(“Ninja”) + Person({ … });
19.
this._super();
20.
_super(); • 関数の caller
プロパティを使って _super の呼び出し元 メソッドを取得. • メソッドの _class プロパティによりクラスを取得 • クラスの _super プロパティにより親クラスを取得 • メソッドの _name プロパティによりメソッドの名前を 取得し, 親クラスの持つ同名メソッドを呼ぶ
21.
_super() の使う各プロパティ • Klass.extend
時に追加 – メソッドの _name – メソッドの _class • deferred.valueOf により追加 – クラスの _super • JavaScript 標準 – arguments.callee • その関数自身 • JavaScript 非標準 (ほぼ全てのブラウザが実装) – caller プロパティ • その関数を呼んだ関数
22.
まとめ
23.
まとめ • def (クラス名)
(定義); – 関数を返す関数 • def (クラス名) << 親クラス(定義); – valueOf – << である必要なし • this._super(); – arguments.callee.caller
24.
演算子オーバーロード欲しい
25.
資料 • def.js
– http://github.com/tobeytailor/def.js • 日本語の解説コメントをつけたコード – https://gist.github.com/2ac889f4b0276ddf9586 ご静聴ありがとうございました
Download