LoginSignup
5
5

More than 5 years have passed since last update.

JavaScript文法(8) JavaScriptのオブジェクト指向プログラミング1 概要

Last updated at Posted at 2016-09-05

この記事の内容

  • オブジェクト指向プログラミング言語としてのJavaScriptの概要
  • 組み込みオブジェクトについて

目次

(1) 学習環境の構築と基本的な書き方
(2) 変数とデータ型
(3) 演算子および配列
(4) 制御構文と関数
(5) 関数の応用1
(6) 関数の応用2
(7) オブジェクトの基礎
(8) JavaScriptのオブジェクト指向プログラミング1 概要 <-- この記事の内容
(9) JavaScriptのオブジェクト指向プログラミング2 オブジェクトの作り方と継承
(10) JavaScriptのオブジェクト指向プログラミング3 多態性
(11) JavaScriptのオブジェクト指向プログラミング4 カプセル化
(12) ES6の新機能について

オブジェクト指向におけるJavaとJavaScriptの決定的な違い

さて今回から、JavaScriptにおけるオブジェクト指向プログラミングについて、詳細を観ていく。まず最初に、オブジェクト指向プログラミングという観点において、Javaとの決定的な違いとして、JavaScriptはクラスベースではない、ということである。

通常、Javaであれば、

class Sample {
    int a = 1;
    int b = 2;

    public void plus(int x){
        System.out.println(a + x);
    }
}

public class UseSample {
    public static void main(String[] args){
        Sample sample = new Sample();

        sample.plus(2);
    }
}

上記のように、「クラス」を作成し、new演算子で「インスタンス」を生成し、プロパティにアクセスしたりメソッドを実行したりする。

しかし、 ES5時点での JavaScriptでは「class ○○」と書くことができない。なのにnew演算子はJavaScriptにもあって、

var str = new String("abc");

このように記述すれば String 型のオブジェクトを生成することができる。これはどういうことかというと、Javaのnew演算子は、(よく使われる例えを引用すると)「クラス」という金型から「インスタンス」というクッキーを1枚ずつ作る、のに対し、JavaScriptのnew演算子は、既に作成されているオブジェクトを受け継いだ新しいオブジェクトを作る、という仕様なのである。

文字列型の String は、Stringという名前のオブジェクトが存在しているから、このような動作になる。

組み込みオブジェクト

ここで、String をはじめとした、JavaScriptで最初から標準で用意されている各種オブジェクトについて、まとめておく。

どういうものがあるかについては、下記のリファレンスを参照。

標準ビルトインオブジェクト - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects

代表的なものについてのみ、触れておく。

オブジェクト名 説明
Object すべてのオブジェクトの元になっているオブジェクト
Date 日時の情報が入っているオブジェクト。日時に関する操作ができるメソッドを持つ。
Math 計算に関するメソッドを持つオブジェクト。
Array データを配列の形で格納するためのオブジェクト。配列操作のメソッドを持つ。
String 文字列を格納するオブジェクト。文字列操作ができるメソッドを持つ。

基本的には、 new 演算子を使って組み込みオブジェクトを受け継いだ新しいオブジェクトを作る。

var dtm = new Date();

オブジェクト名.メソッド名() のように記述して、作った新しいオブジェクトが持つメソッドを実行する。(いわばインスタンスメソッド)

// 今年は2016年です と表示される(執筆時)
console.log("今年は" + dtm.getFullYear() + "年です");

ただ、Mathオブジェクトなど、わざわざ新しいオブジェクトを作る必要がないオブジェクトもあり、そういったオブジェクトのメソッドを実行したい場合は、

var f = 1.5;              // 実数
var i = Math.round(f);    // roundで小数点以下を四捨五入
console.log(i);           // 2 と表示される

このように 組み込みオブジェクト名.メソッド名() で良い。(いわばクラスメソッド)

Objectオブジェクト

Javaでは、一番上のクラスに java.lang.Object があって、他のクラスは必ずコレを継承しているのと同様、JavaScriptでは、すべてのオブジェクトが Object オブジェクトを継承している。

Dateオブジェクト

メソッド名 説明
getFullYear 「年」の数(西暦)の4桁を返す
getMonth 「月」の数を返す。ただしreturn値は 0 から 11 までとなっていて、実際の月数から-1ずれている。
getDate 「日」の数を返す
getHours 「時」の数を返す
getMinutes 「分」の数を返す
getSeconds 「秒」の数を返す

Mathオブジェクト

メソッド名 説明
ceil 小数点以下を切り上げにした数値を返す
floor 小数点以下を切り捨てにした数値を返す
round 小数点以下を四捨五入した数値を返す
abs 絶対値の計算結果を返す
pow 累乗(xのy乗)の計算結果を返す
sqrt 平方根の計算結果を返す
random 0以上1未満のランダムな数値を返す

Arrayオブジェクト

メソッド名 説明
push 配列の末尾に新しい要素を追加する
pop 配列の末尾にある要素を削除する
join 引数に指定した文字を区切り文字として、配列要素を1つの文字列にまとめる
reverse 配列を逆順にする
sort 配列要素のABC順で配列を並び替える
indexOf 引数に指定した配列要素が配列の何番目にあるか検索する

また、Array オブジェクトには、length プロパティという、配列の要素が何個あるかという情報を保持するプロパティを持っている。

Stringオブジェクト

メソッド名 説明
indexOf 引数に指定した文字列を検索する
slice 文字列の一部分を抜き出す
split 引数に指定した文字を区切り文字として、文字列を区切って配列にする
reverse 配列を逆順にする
match 引数に指定した正規表現を基にして文字列を検索する
replace 正規表現を基にして文字列を検索し、該当する箇所を別の文字列で置き換える
trim 文字列の最初と最後にある不要なスペース(空白)を削除する

※正規表現については割愛。このサイトなどを参照。

サルにもわかる正規表現入門
http://www.mnet.ne.jp/~nakama/

そのまま使える正規表現集
http://befine.jugem.jp/?eid=29

次回予告

独自なオブジェクトの作り方と継承について

5
5
0

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
5
5