JavaScriptのプロトタイプ継承について

Published: 2016年3月12日 by tomsato

概要

JavaScriptのプロトタイプ継承についてのまとめ
自分なりのメモなのであしからず

JavaScript勉強シリーズ

プロトタイプ継承について

JavaScriptにはクラスを作る機能は用意されていない
(ECMAScript 6でclass構文が追加されたみたいだがブラウザの対応状況がまだまだみたい)

しかしJavaScriptにはオブジェクトの継承に関する概念がある
感覚としては親オブジェクトのプロパティを子オブジェクトのプロパティが継承するってことで
子オブジェクトではそのプロパティについて書いてないが親オブジェクトで書いてあるのでそれを継承して使えちゃうという話
プロトタイプ継承の例

// JavaScriptにはクラスというものがないが
// クラス相当のものは作成できるので便宜上クラスと呼ぶ

// クラス定義相当
function TestClass(x) {
  this.x = x;
}
MyClass.prototype.show = function() {
  print(this.x);
}

// 上記のインスタンス生成 (コンストラクタ呼び出し)
var obj = new TestClass(5);
// メソッド呼び出し
obj.show();  // 5

showは直接のプロパティでないがメソッド呼び出しができる
-> 他のオブジェクト(prototypeオブジェクト)のプロパティを継承している

全ての関数オブジェクトはprototypeというプロパティを保持している

// 関数オブジェクトがprototypeプロパティを持っていることを調べる

var a = {}
typeof a;            // object
typeof a.prototype;  // undefined
Object.getOwnPropertyNames(a); // 出力なし

var a = function(){return 0;}
typeof a;           // function
typeof a.prototype; // object
Object.getOwnPropertyNames(a); // arguments,caller,length,name,prototype

Object.getOwnPropertyNames :オブジェクト自身が持っているプロパティの名前一覧

関数オブジェクトを定義した直後ではprototypeプロパティには
何もプロパティを持たないオブジェクトを参照している
開発者は別のオブジェクトを代入したり新しいプロパティを設定することが可能
そして関数オブジェクトをコンストラクタとして生成したオブジェクトは、コンストラクタのprototypeプロパティに代入されているオブジェクトに対して暗黙の参照を持っている

参考

Share

最近の投稿

NetlifyのSplit TestingとFunctionsについて使い方をまとめる Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

NetlifyとはHTMLなどの静的コンテンツのみで構成されたWebサイトを閲覧できる形で配信するWebサービス GitHubやBitbucket、GitLabなどと連携して使うことができて、リポジトリにプッシュすることで自動でCI/CDを行うことができる、無料枠が豊富で独自ドメインを設定可能

WordPressからJekyll(GitHub Pages)に移行した手順をまとめる。 お金的な事情や使いやすさなどの理由で無料のJekyll+GitHub Pagesに移行した。JekyllとはMarkdown等から静的ページを生成する静的サイトジェネレータ

Scala開発のためにScalaらしさをまとめる 言語設計者の設計思想を元にScalaらしさについてまとめる オブジェクト指向と関数型の融合について

StorybookとはUI開発環境を提供するツール React、React Native、Angular、Vueなどをサポートしている ユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする

カテゴリ一覧

タグ一覧