JavaScript を書き始める前に知っておきたい JavaScript のこと #02

JavaScript を書き始める前に知っておきたい JavaScript のこと #02

今回は「ざっくり知る」prototype の話です

A85bfbcb7db07e936c0125487e7799fa?s=128

Kotaro Chiba

May 23, 2020
Tweet

Transcript

  1. JavaScript を書き始める前に知 っておきたい JavaScript のこと #02 Kanazawa.js Remote Meetup #03

    千葉 弘太郎 1 1
  2. 千葉 弘太郎(ちば こうたろう) Kotaro Chiba Twitter: @ur_uha Github: uruha Work:

    DMM.com LLC 2 2
  3. 前回 JavaScript を書き始める前にやっておきたいこと 3 3

  4. 今回 「ざっくり知る」JavaScript の prototype について 4 4

  5. const arrayInstance = ['hello', 'world']; arrayInstance.join(); // => 'hello,world' 5

    5
  6. なぜ使えるのか?(考えたことあります?) 本来 arrayInstance には join メソッドは無いはず...(´・ω・`) 6 6

  7. 原理 prototype を辿って(プロトタイプチェーン)、 Array.prototype.join() メソッドを使っている。 7 7

  8. Array() ──────── Array.prototype [prototype] [constructor, join, ...] │ │ arrayInstance

    は prototype を探しに⾏く │ │ └ instance → arrayInstance ['hello', 'world'] 8 8
  9. また、 Array.prototype は Object() の instance、 Object.prototype へチェーンが続きます 9 9

  10. Object.prototype │ │ Array() ──────── Array.prototype [prototype] [constructor, join, ...]

    │ │ │ │ └ instance → arrayInstance ['hello', 'world'] 10 10
  11. ⾒てみる。 11 11

  12. arrayInstance がインスタンス化される際に __proto__ という prototype をたどるためのプロパティが存在しま す。 12 12

  13. このチェーンは全ての⼤元である Object() まで続きます。 13 13

  14. ただ、 __proto__ は ECMA の⾮標準プロパティのため、継 承元の prototype を取得するなど実際にソースコードレベ ルで使⽤する場合は Object.getPrototypeOf

    を使ったほ うが良いです。 14 14
  15. Object.prototype │ │ Array() ──────── Array.prototype [prototype] [constructor, join, ...]

    │ │ │ │ └ instance ┬→ arrayInstance ├→ arrayInstance_02 ├→ arrayInstance_03 ├→ ... また、全てのインスタンスが、共通の prototype を継承し ているのも特徴です。 15 15
  16. まとめ ⾃作のオブジェクトがビルトイン/ネイティブオブジェクトの メソッドを使えるのはプロトタイプチェーンによって、継承 元のメソッドを参照しているから ⾃作のオブジェクトをインスタンス化した際に prototype プロパティが付与され遡ることができる prototype の遡りは Object

    まで続く 全てのインスタンスは共通の prototype を継承している 16 16
  17. もっと踏み込むといろいろあるんですが、 とりあえず仕組みを理解するところまで。 17 17

  18. 次回予告 (参加できたら) 18 18

  19. JavaScript を書き始めたら知っておきたい JavaScript のこと JavaScript についてもう少し詳しく オブジェクト指向 prototype 継承 動的型付け

    シングルスレッド 動的型付けやシングルスレッドらへんを喋らたら 19 19