MENUCLOSE
twitter ツイッターfeedlyRSS

オンスタでは、オンラインで学習するために役立つコンテンツを掲載しています。そのほか、UdemyをはじめとしたEラーニングサービスの紹介も行っています。

オンスタ | オンラインで学習するための近道になるサイト
[JavaScript_中級者への道]  プロトタイプについて – [2] クラスを定義して呼び出す

[JavaScript_中級者への道] プロトタイプについて – [2] クラスを定義して呼び出す

公開日:2020年02月18日
最終更新日:2022年01月17日
オンスタ運営
プログラミング
ホーム > 全記事一覧 > 制作 > エンジニア > プログラミング > [JavaScript_中級者への道] プロトタイプについて – [2] クラスを定義して呼び出す

Warning: Undefined variable $_cat_enginieer_flag in /home/growgroup/online-study.jp/public_html/wp-content/themes/online-study-wp/views/object/components/related-posts-inline.php on line 37
このエントリーをはてなブックマークに追加
[JavaScript_中級者への道]  プロトタイプについて – [2] クラスを定義して呼び出す
【PR】Udemyならスマホでもタブレットでも、いつでも気軽に学べます。

前回、プロトタイプについて学びましたが、次は prototype を利用した機能実装について学びましょう。

1. オブジェクト指向…難しい

中々、オブジェクト指向といっても概念を理解するのは一苦労です。

しかし、プロトタイプを利用してコーディングをするのは、そこまで複雑ではありません。

 

これまで3~4つの関数で実装していた機能でも、もしくは そのまま書いている処理でも、考え方をちょっと変えるだけでオブジェクトを利用して構築することが可能です。

まずは、些細な機能でもプロトタイプを利用してクラスとして機能を完結させる書き方にチャレンジしてみましょう。

 

2. クラスを実装してみる

クラスは、最初に呼び出す時に new 演算子を利用して初期化というものを行います。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new

new 演算子は以下の処理を行います。

  1. 空の JavaScript オブジェクトを生成する
  2. このオブジェクト (のコンストラクター) を他のオブジェクトへリンクする
  3. ステップ 1 で新しく生成されたオブジェクトを this コンテキストとして渡す
  4. 関数が自分自身を返さない場合は this を返す

ここまでよくわかりませんね。

実際にためしてみましょう。 

例えば、次のような関数を定義してみます。

function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
  return this;
}

var p = Person("タカシ","29","男性");
console.dir(p)

実行結果

単純にPersonという関数を定義し、引数を渡し呼び出しただけです。

関数内で利用している this という変数は、JavaScriptで最初から用意されている特別な変数です。

thisに格納されている値は、thisをどこから実行したのか、またはどのような方法で実行したのかで変化します。

 

thisって何?使い方を覚えて、JavaScriptをもっと楽しく使おう!

https://www.sejuku.net/blog/29389

 

上記の結果では、Person関数内で呼び出した this は、Window オブジェクトを参照していることがわかります。

では、次に new 演算子を利用してみましょう。

function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
  return this;
}

var p = new Person("タカシ","29","男性");
console.dir(p)

本当に new  演算子を Person 関数の前につけただけです。

しかし、実行結果は以下のようになります。

Personというオブジェクトを出力しています。

先ほどの関数として呼び出した結果では this の参照先は window オブジェクトでしたが、new 演算子をつけると this の参照先がその関数内になっていることがわかります。

 

new 演算子をつけて関数を呼び出した場合、その関数は特別な空間(スコープ)で包まれて、独自のオブジェクトとなります。また、この方法で呼び出したオブジェクトをインスタンスと呼びます。

 

まだぽかーんとなるかもしれませんが、この this がインスタンス内で共通の値の格納場所になるようなイメージです。

 

この仕様とprototypeを組み合わせることで、次のような実装が可能となります。

function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
  return this;
}

// 名前と歳を文章として加工し返すメソッド
Person.prototype.info = function(){
    return this.name + "君は" + this.age + "歳です"
}

var p = new Person("タカシ","29","男性");
var profileText = p.info();
console.log(profileText)  // タカシ君は29歳です

実行結果

 

Person という関数の prototype プロパティ内に、info というメソッドを定義します。

名前と歳を文章として加工し返すメソッドです。

 

この時、実行結果から Person.prototype.info 内で呼び出している this.name、this.age も、同じPerson内で処理された値を参照していることがわかります。

プロトタイプは継承され、生成されたオブジェクト(この場合はインスタンス)でも、利用することができます。

 

一見関数にはみえるのですが、new 演算子で初期化し利用することを前提としたものをJavaScriptではクラスと呼びます。

 

コンストラクタについて

new Person()を実行した時には、最初に定義した Person 関数が呼び出されます。

この最初に呼び出される関数をコンストラクタと呼びます。

コンストラクタ(英:constructor)とはオブジェクト指向のプログラミング言語で登場する用語のひとつでありインスタンスを作成したタイミングで実行されるメソッドのことです。
もう少しざっくり書くとクラスをnewした瞬間に実行される関数のことです。

 

インスタンスを生成する時に、thisは初期化される

new 演算子でインスタンスを生成すると、this は初期化されます。

function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
  return this;
}

// 名前と歳を文章として加工し返すメソッド
Person.prototype.info = function(){
    return this.name + "君は" + this.age + "歳です"
}

var takashi = new Person("タカシ","29","男性");
var takashi_info = takashi.info();
console.log(takashi_info)  // タカシ君は29歳です

var shogo = new Person("しょうご","28","男性");
var shogo_info = shogo.info();
console.log(shogo_info)  // しょうご君は28歳です

初期化されるということは、与える引数を変えて何度も生成することが可能です。

 

メンバ変数 (インスタンス変数)

上の例で出てきているように、クラスの内部でメンバ変数を定義・参照するには this.<プロパティ名> を使います。インスタンス変数やメソッド呼び出しの際にJavaScript では this が必ず必要です。

 

まとめ

  • new 演算子を関数を呼び出す前につけることで、その関数内で呼び出すことができる this の参照先がその関数自身になる
  • new 演算子で呼び出し最初に実行される関数をコンストラクタと呼ぶ
  • new 演算子で生成したオブジェクトをインスタンスと呼ぶ
  • プロトタイプは継承され、生成されたオブジェクト(この場合はインスタンス)でも、利用することができる。

【PR】Udemyならスマホでもタブレットでも、いつでも気軽に学べます。

Udemyを実際に体験した方の感想記事もぜひご覧ください♪

関連コンテンツ


Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
【Code.org】4歳から18歳まで!ビジュアルプログラミング言語でプログラミングが学べる『Code.org』について調べてみた
エンジニア
オンライン学習
プログラミング
制作
公開日: 2020年07月21日
最終更新日: 2022年01月17日
【Code.org】4歳から18歳まで!ビジュアルプログラミング言語でプログラミングが学べる『Code.org』について調べてみた
  • # Code.org
オンスタ運営

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
制作者への影響を探る!Gutenberg (グーテンベルグ) – WordPress 5.0 搭載予定の新エディタ
テクノロジー
プログラミング
公開日: 2017年11月29日
最終更新日: 2017年11月29日
制作者への影響を探る!Gutenberg (グーテンベルグ) – WordPress 5.0 搭載予定の新エディタ
オンスタ運営

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
【PHP】PHPでライブラリ管理!「Composer」を使ってみよう
テクノロジー
プログラミング
公開日: 2017年12月06日
最終更新日: 2017年12月06日
【PHP】PHPでライブラリ管理!「Composer」を使ってみよう
オンスタ運営

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
年末だしwebサイトで使われるアニメーション技術の移り変わりを追ってみた
その他
プログラミング
公開日: 2016年12月20日
最終更新日: 2016年12月20日
年末だしwebサイトで使われるアニメーション技術の移り変わりを追ってみた
オンスタ運営

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
夏だしオバケ怖いってことでPhantomJSを使ってスクレイピング試してみた
プログラミング
公開日: 2017年08月04日
最終更新日: 2017年08月04日
夏だしオバケ怖いってことでPhantomJSを使ってスクレイピング試してみた
オンスタ運営

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
@keyframesでアニメーションをさせたい!
テクノロジー
プログラミング
公開日: 2020年11月25日
最終更新日: 2020年11月25日
@keyframesでアニメーションをさせたい!
s.masuda

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
【PHP】PHPでライブラリ管理!「Composer」を使ってみよう
エンジニア
プログラミング
公開日: 2018年12月06日
最終更新日: 2022年01月17日
【PHP】PHPでライブラリ管理!「Composer」を使ってみよう
オンスタ運営

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
JS初心者必見!JavaScriptの勉強ができるWEBサービス紹介【タイプ別】
プログラミング
マークアップ
公開日: 2017年12月28日
最終更新日: 2017年12月28日
JS初心者必見!JavaScriptの勉強ができるWEBサービス紹介【タイプ別】
オンスタ運営

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
[JavaScript_中級者への道] プロトタイプについて – [3] 身近な機能を実装してみる
プログラミング
公開日: 2020年02月19日
最終更新日: 2022年01月17日
[JavaScript_中級者への道] プロトタイプについて – [3] 身近な機能を実装してみる
  • # ES6
  • # JavaScript
  • # プロトタイプ
オンスタ運営

Warning: Trying to access array offset on value of type bool in /home/growgroup/online-study.jp/public_html/wp-content/plugins/wp-word-count/public/class-wpwc-public.php on line 123
「HTML5プロフェッショナル認定試験」合格に向けての勉強方法〜資格取得を目標にして知識を深めよう〜
プログラミング
マークアップ
公開日: 2017年10月20日
最終更新日: 2017年10月20日
「HTML5プロフェッショナル認定試験」合格に向けての勉強方法〜資格取得を目標にして知識を深めよう〜
オンスタ運営
全記事一覧

web制作者にオススメのオンライン学習サイト「Udemy」

世界最大級のコースがラインナップ!電子書籍サイト「Udemy」

世界最大級のコースがラインナップ!オンライン学習サイト「Udemy」

「Udemy」ではいつでもどんなトピックでも、専門家が教える何千ものコースを用意されており、無料で学べるコースも多数あります。もうちょっと勉強したいな。スキルアップしたいな。と思ったら是非チェックしてみてください。