4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaScriptに代表されるプロトタイプ言語には(本来)クラス→インスタンスという概念は無い

Last updated at Posted at 2016-07-16

大事な点

  • プロトタイプ言語ではクラス→インスタンスの関係はない
  • すべてがオブジェクトみたいなもの(プリミティブ型を除く)
  • オブジェクトが親オブジェクト的なものをプロトタイプという概念で保持
  • 自分にメッセージの応答(プロパティやメソッドの定義)がなければ、自分が保持するプロトタイプに同様のメッセージを転送する。

つまりこんな感じ。

Main.js
// 適当なオブジェクトを3つ作成
var a = new Object;
var b = new Object;
var c = new Object;

// aにメッセージ応答を定義
a.hoge = "hoge";

// bとcにプロトタイプをセット
b.__proto__ = a;
c.__proto__ = a;

// メッセージ送信
console.log(a.hoge); // "hoge" // 当然a.hogeが呼び出される
console.log(b.hoge); // "hoge" // b.__proto__.hogeに転送
console.log(c.hoge); // "hoge" // c.__proto__.hogeに転送

結論

  • JavaScriptに代表されるプロトタイプ言語にはクラス→インスタンスという概念は無い
  • クラス→インスタンス的な概念は、共通処理を実装したオブジェクトを、各オブジェクトのプロトタイプにセット(共有)して利用する
  • new Object的なものは結局指定された定数をプロトタイプにセットしたオブジェクトを返すだけ(その後コンストラクタも呼び出すけど)

参考

4
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?