JavaScriptには初めから定義されているオブジェクトが多数あります。 これらを「組み込みオブジェクト」と言います。
つまり、自分でメソッドやプロパティを作らなくても、JavaScriptが初めから作ってくれているオブジェクトです。
ではNumberオブジェクトから説明します。
以下がNumberオブジェクトのメソッドとプロパティです。 では例を見てみましょう。 初めにオブジェクトを作成してから、様々なメソッドを実行します。 この例では引数である10をtoStringメソッドで8進数や16進数に変換します。何も指定しなかった場合は10進数になります。
結果は上から
「10」と「12」と「a」
です。 このメソッドは「指定した数で四捨五入」します。つまり1を指定した場合は小数点第1位で四捨五入します。指定する数は0 ~ 20までとなります。
では例をみてみましょう。 結果は上から
「15」「15.4」「15.36790」
です。 toExponentialメソッドは数値オブジェクトを指数表記に変換します。
では例をみてみましょう。 toPrecisionメソッドは数値をで表した文字列を返します。
指定可能な数は1から21 までです。
では例をみてみましょう。 a.toPrecision(3)は有効桁数が3桁ですので、小数点以下が四捨五入されて「68.2」になります。
a.toPrecision(2)のように有効桁数がオブジェクトの整数部分と同じ場合は小数点以下が四捨五入された数値を返します。
この例では「68」になりますが、例えばaが68.7534であれば「69」になります。
a.toPrecision(1)のように有効桁数がオブジェクトの整数部分より小さい場合には指数表記になります。
a.toPrecision()のように有効桁数を指定しない場合にはtoString メソッドが代わりに呼び出されます。
次はNumberオブジェクトのプロパティに進みます。
以下のプロパティは静的プロパティなので、オブジェクトを作成しなくても使用できます。 では例をみてみましょう。
タグ: 静的プロパティ
この章ではオブジェクトを作成しなくても(newを使わない)、クラスのメソッドやプロパティを呼び出せる静的メソッド、静的プロパティについて説明します。
今まではオブジェクトを作成してから、以下のようにデータを入れていました。 しかし、静的メソッド、静的プロパティではオブジェクトを作らなくても、直接データを入れることが出来ます。
では例をみてみましょう。 これまではnew を使用したオブジェクトからメソッドやプロパティを呼び出していましたが、オブジェクトを作成しなくても直接メソッドやプロパティを追加したり、呼び出したりすることが出来ます。
つまり、静的メソッド、静的プロパティはクラスに属するメソッドやプロパティと言うことです。
以下の構文をみていただくと分かりますが、クラス名で変数やメソッドに値を入れているのが分かります。これがクラスに属しているという意味です。 オブジェクトを作成してからプロパティに値を入れたり、変更する場合には、複数のオブジェクトを作ったとしても変更されるのはそのオブジェクトに属するプロパティだけです。
例えば次の例のshopオブジェクトとshop2オブジェクトはそれぞれプロパティに値を入れていますが、これらのプロパティの間には値の共有はありません。
なぜなら、これらのプロパティはそれぞれのオブジェクトに属しているからです。 オブジェクトに属するプロパティと違って静的プロパティはクラスに属するので、プロパティが持つ値は1つです。
例では以下の箇所が静的メソッドと静的プロパティです。 静的メソッドを出力する場合にはという構文で書きます。 注意点としては静的メソッド内でthis(インスタンス自身)を使うことが出来ないことです。
結果は「消費税は100円です」です。
クラスについて知ろう
この章ではクラスについて説明します。
今までのプログラムでは変数と関数を扱ってきましたが、クラスと言う機能を使うことで、多くの変数と関数を1つの機能体として働かせてデータを処理することが出来ます。
クラスとは何かしらの物を作る設計図に例えられます。
設計図は車や家や鉛筆をつくる場合に必要ですが、この設計図に当たるものがクラスです。
車や家や鉛筆の中には色々な部品が含まれていますが、それらの部品にはがあります。
例えば、鉛筆であれば、「状態」は鉛筆の形、芯、線の濃さなどで、「ふるまい」は線を引く、削るなどの動作です。
その「状態やふるまい」をクラスと言う設計図に書いていきます。
「状態」を変数で書き、「ふるまい」を関数で書くことになります。
その「状態やふるまい」に指示を出すのはオブジェクトです。
例えば線を消すなど具体的な指示をオブジェクトと言う司令塔から出します。
「状態」は変数で書くと言いましたが、クラスの中の変数のことをプロパティと言います。
「ふるまい」は関数で書くと言いましたが、クラスの中の関数のことをメソッドと言います。
では初めにクラスの基本から説明します。
クラスの中に「状態」や「ふるまい」を書いていきます。 クラス名の付け方は基本的には変数名の付け方と同じですが、変数との違いは大文字と小文字を区別しないことです。
例えばとは同じクラスを意味します。
その他にクラス名の付け方で気を付けることは最初の文字を大文字にして後は小文字というのが慣例になっていることです。 オブジェクトを作成するためにはクラス名の前にを付けます。
これをオブジェクト変数に代入すればオブジェクトの完成です。
このオブジェクトを作る過程を「インスタンス化」と言います。
クラスはただの設計図なので、オブジェクトから指示を出さないと何も動きません。
先ほども説明しましたが、「線を消す」など具体的な指示をオブジェクトと言う司令塔から出します。
ではクラスとオブジェクトの関係をもう一度説明します。
例えば新築の家をつくるとします。
そこで、家にこんな機能を付けたい、あんな機能も付けたいと思い悩むことでしょう。
ある人はプールや床暖房を付けたり。
それを実現するには設計図にその「プールや床暖房」やプールや床暖房を操作する機能を付け加えないといけません。
実際にはクラスの中にプール、床暖房という変数を設定し、プールや床暖房を実際に機能させるためにメソッドの中で水や床の温度を上げたり下げたりする機能を加える必要があります。
この設計図はそのままでは動きませんので、誰かの指揮のもとに動かさなくてはいけません。その指揮者の役割がオブジェクトです。
「オブジェクト」は例えば冬になったらプールの水の温度を40度にするなど細かな指示をします。
ではクラスの例を見てみましょう。 このクラスにはBanksystemという名前が付いています。
以下の変数がプロパティです。
プロパティの前にpublicが付いていますが、これはプロパティに対してクラスの外からでも、どこからでもアクセスが出来ることを意味します。
publicは修飾子と呼ばれています。
修飾子はこの他にもprivate、protectedなどがありますが、後ほど説明します。 以下のようにメソッドの前にpublicが付いていますが、これはメソッドに対してクラスの外からでも、どこからでもアクセスが出来ることを意味します。
次はクラスを実行する方法について説明します。
クラスは設計図なのでこのままでは何も機能しません。
クラスを機能させるためには以下のようにオブジェクトを作成しなくてはいけません。
それが$Bankです。作り方は説明した通り、クラス名の前にnewを付け、それを変数に代入すればオブジェクトの完成です。
次にプロパティにデータを入れていきます。
以下のようにデータを入れます。 $オブジェクトとプロパティの間にある「->」はアロー演算子と言います。
クラスのプロパティやメソッドにアクセスするときに使います。
次はメソッドにデータを入れます。 メソッドの場合には「=」を使わないで、メソッドの引数に渡したいデータを入れます。
次にプロパティをクラスの中で使用する方法について説明します。
クラスの中でプロパティやメソッドを使用するためには「$this->」を使用しなくてはいけません。
ですので、メソッドの中でプロパティを使用するためには次のように「$this->」を使用します。 結果は「山田銀行の近藤次郎様の残高は240000」となります。
オブジェクトは何個でも作成することが出来るので、次の例をみてみましょう。
先ほどの例は$Bankオブジェクトだけでしたが、オブジェクトはいくつでも作成することが出来ます。
以下の例では$Bank1を付け加えました。
次にプロパティに対してクラスの外からのアクセスを禁止する場合の対処法について説明します。
先ほどの例との違いは以下のsum関数と$moneysumの箇所です。 プロパティに対してクラスの外からのアクセスを禁止する場合にはプロパティの前にprivateを付けます。
privateにする理由はクラスの外から自由にプロパティの値を書き替えられては困る場合などに使われます。
privateを付けますと、クラスの外部から直接プロパティに対してのようなアクセスはすることが出来なくなります。
では、このprivate指定のプロパティにどのようにデータを入れるのかと言いますとメソッドを通してデータを入れます。
それが以下のsumメソッドです。
このsumメソッドは入力したデータが0より小さい場合には0を$moneysumに代入するというチェック機能を付けました。
deposiメソッドやwithdrawalメソッドにはチェック機能を付けませんでしたが、sumメソッドのようにマイナスの値が入らないようにif文でチェックしています。
次は「コンストラクタ」といわれる機能について説明します。
例をみてみましょう。ではコンストラクタの機能について説明します。 functionの次のアンダーバーは2つあることに注意してください。
コンストラクタの修飾子は必ずpublicです。
また、引数は省略できます。
この機能はコンストラクタと言いまして、オブジェクトを作成するときに自動的に呼び出されるメソッドです。
つまり、newによってオブジェクトが作られるときに自動的に呼び出されるメソッドです。
これは変数を初期化したい時に使用します。
コンストラクタを呼び出すには以下の通り、オブジェクトの引数に渡すデータをなどと記述します。
引数がない場合には省略できます。 以下のようにオブジェクトを作成するときに自動的にコンストラクタが呼び出され、引数の値がそれぞれコンストラクタの引数に代入されます。
次は静的メソッドと静的プロパティについて説明します。
静的メソッドや静的プロパティはオブジェクトを作成しなくてもアクセスすることができるメソッドやプロパティで、オブジェクトからデータを入れたりすることはできません。
静的メソッドや静的プロパティの作成方法はメソッドやプロパティの前にstaticを付けるだけです。
ここでいくつかの注意点を説明します。
〇「$this->」 はstaticメソッドの内部で使用することはできません。
〇静的メソッドや静的プロパティには前の例の のようにを使ってアクセスすることはできません。
〇静的メソッドや静的プロパティはクラスに属しているメソッドやプロパティです。
今まではクラスのオブジェクトを作成して、そのオブジェクトからメソッドやプロパティにデータを入れてきました。
なぜなら、それらのメソッドやプロパティはオブジェクトに属しているからです。
例えば以下の$Bankオブジェクトと$Bank1オブジェクトで使われるプロパティとメソッドは同じものを使っていますが、各データはそれぞれのオブジェクトの持ち物ですので、共通して使えるデータはありません。 それに対して静的メソッドや静的プロパティは各オブジェクトが共通して使えるデータです。
では先ほどの例を見てみましょう。
の箇所が静的プロパティですが、そのプロパティには0が代入されています。
この$totalプロパティは「クラスに属しています」。
次に静的プロパティにアクセスしてみましょう。
今まではを使っていましたが、は静的メソッドや静的プロパティでは使えないので、代わりにという形式を使います。
以下の箇所ではコンストラクタが呼び出されるごとに$totalに1が足されていきます。 ですので、1回目のコンストラクタの呼び出しで$totalに「1」が足されるのででは「1人目山田銀行の近藤次郎様の残高は240000」と出力されます。
2回目のコンストラクタの呼び出しで「1」である$totalにさらに「1」が足されるのででは「2人目山田銀行の近藤次郎様の残高は240000」と出力されます。
$Bankオブジェクトと$Bank1オブジェクトが1つの$totalを共通して使っていることが分かります。
これは説明した通り、$totalがクラスに属しているからです。