【JavaScript】オブジェクトとは
主役は「モノ」そのもの
JavaScriptのオブジェクトは
名前をキーにアクセスできる配列、要は連想配列である
と説明した
うむ、たしかにしている
【JavaScript】データ型のオブジェクトリテラル(object)のとこね
これはJavaScriptのオブジェクトを
実装的な視点からとらえるといった意味では正しいが
オブジェクトという概念そのもを説明するには不十分である
- オブジェクト
- 単に名前がついた入れ物の集合ではない
- オブジェクト自体が一つのモノであり、中に含まれる要素は、このモノの特性や動作を表すために存在する
- (連想配列ではなく)「オブジェクト」という言葉を使う場合には、主役は個々の要素ではなく、オブジェクト(モノ)そのものである
なんのことかなんとなくしかわからないのだが
例を見てなんとなくはあく
- 連想配列の場合
- 複数要素の集合体(個々の要素が主体)
配列data
- X0001
- 山田
- X0002
- 鈴木
- Z0099
- 佐藤
- U0108
- 田中
- オブジェクトの場合
- ひとつのモノを表現するために複数の属性情報を持つ(モノ全体が主体)
Memberオブジェクト
- name
- 山田
- sex
- 男
- birth
- 1983/10/20
- address
- 東京都‥
複数の属性情報って言い回しが
イメージしやすかったーなるほどー
プログラム上で扱う対象をオブジェクト(モノ)に見立てて
オブジェクトを中心としてコードを組み立てていく手法を
オブジェクト指向という
ほっほーなるほどです
オブジェクト=プロパティ+メソッド
オブジェクトはプロパティとメソッドとから構成される
ここでプロパティとメソッドキタ(゚∀゚)コレ
お久しぶりですね
プロパティとは
「オブジェクト(モノ)の状態や特性を表すための情報」のこと
対してメソッドは
「オブジェクト(モノ)を操作するための道具」
何言ってるかわからないので例を
オブジェクト:プログラムで扱う対象
例>>フォームを表すFormオブジェクト
- プロパティ:モノの状態や特性を表す情報
- フォームの名前
- フォームの送信先URL
- フォームに含まれる要素群
- etc..
- メソッド:モノを操作するための道具
- フォームを送信する
- フォームをクリアする
- フォームを無効化する
- etc..
プロパティ/メソッドという視点から見たとき
オブジェクトとは
「データを操作するためのさまざまな機能を持った」高機能な入れ物といえる
オブジェクトを利用するための準備(new演算子)
オブジェクト指向の世界では
後述するような例外を除いて
もともと用意されたオブジェクトを
直接利用することを認めていない
「自分自身の中でデータを保持できる」という性質を持っている
ふむ‥
たとえばオブジェクトに対して
アプリケーションが複数の箇所から
異なる目的で同一のプロパティを対象に
データを書き込んでしまったら
当然データは互いに衝突して
アプリケーションは正しく動作しない
そのためオリジナルのオブジェクトには手を加えず
「オリジナルを複製したコピー」を操作することで
データの競合を防ぐようになっている
このようにオブジェクトの複製を作ることをインスタンス化という
また、インスタンス化によってできる複製のことをインスタンスという
インスタンス化とは
「オブジェクトを扱うための『自分専用の領域』を確保する行為」
と言い換えられる
var 変数名 = new オブジェクト名([引数, ..])
オブジェクトには、オブジェクトを初期化するために
オブジェクトと同名のメソッドが用意されている
この初期化メソッドのことをコンストラクタという
オブジェクト名は、正確にいうと
コンストラクタ名である
‥‥‥(゚ロ゚;)ポカーン
生成されたインスタンスは変数に格納され
以降は、その変数をオブジェクトとして扱うことができる
インスタンスが格納された変数は
インスタンス変数、オブジェクト変数と呼ぶ場合もある
インスタンス変数からプロパティ/メソッドを呼び出すには
ドット構文を使って以下のように記述する
変数名.プロパティ名 [= 設定値]; 変数名.メソッド名([引数 [, ..]]);
‥‥‥(゚ロ゚;)ポカーン
どうしようちょっとよくわからない上に
これ以上の説明が載ってない‥
ちょっと先に進んでみる‥
静的プロパティ/静的メソッド
プロパティやメソッドによっては
例外的にインスタンスを生成せず利用できるものがある
このようなプロパティ/メソッドのことを静的プロパティ/静的メソッド
またはクラスプロパティ/クラスメソッドと呼ぶ
静的プロパティ/静的メソッドを呼び出すための一般的な構文
オブジェクト名.プロパティ名 [= 設定値]; オブジェクト名.メソッド名([引数 [, ..]]);
組み込みオブジェクトとは
JavaScriptでは多くのオブジェクトが公開されているが
その中でも最も基本的なものが
組み込みオブジェクト(Built-in Object:ビルトインオブジェクト)である
「組み込み」というのは
「JavaScriptにあらかじめ組み込まれた」という意味である
今後登場するブラウザオブジェクトが
特定の環境(ブラウザ上)でしか動作しないのに対し
組み込みオブジェクトは
JavaScriptが動作するすべての環境で利用することができる
また、JavaScriptでは自分でオブジェクトを定義することもできるが
これらの組み込みオブジェクトは
特別な宣言や定義を行うことなく利用できる
JavaScriptで利用可能な組み込みオブジェクト
- (Global)
- JavaScriptの基本機能にアクセスするための手段を提供
- Object
- 全てのおっぶジェクトにひな形となる機能を提供
- Array
- 配列を操作するための手段を提供
- String
- 文字列を操作するための手段を提供
- Boolean
- 真偽値を操作するための手段を提供
- Number
- 数値を操作するための手段を提供
- Function
- 関数を操作するための手段を提供
- Math
- 数値演算を実行するための手段を提供
- Date
- 日付を操作するための手段を提供
- RegExp
- 正規表現に関わる機能を提供
- Error
- エラー情報を管理
中でも下記はJavaScriptのデータ型に対応している
- Object
- Array
- String
- Boolean
- Number
- Function
オブジェクトを利用するには
インスタンス化という手続きを踏む必要があるが
JavaScriptではリテラルをそのまま
対応する組み込みオブジェクトとして利用できるため
インスタンス化をほとんど意識する必要がない
基本データ型でもnew演算子をつかって
var str = new String('こんにちは');
のように明示的にオブジェクトを生成することはできるが
ほとんどの場合冗長であるだけで
むしろ有害なことの方が多い
基本データ型をnew演算子を使ってインスタンス化するのは
原則として避けるべきである
JavaScriptの標準的なデータ型を扱う
組み込みオブジェクトの中でも
特に基本型の文字列、数値、論理値を扱うためのオブジェクトを
ラッパーオブジェクトという
ラッパーオブジェクトは
「単なる値にすぎない基本型のデータを包んで(ラップして)、
オブジェクトとしての機能を追加するするためのオブジェクト」
である
JavaScriptでは基本データ型と
オブジェクトとしての体裁を持つラッパーオブジェクトとを
自動的に相互変換するため
アプリケーション開発者がこれを意識する必要はない
ふむふむ‥なんか全体的に
‥‥‥(゚ロ゚;)ポカーン
なんだけれど概念的なところを聞いたら
ちょっとわかってきた、気がしている
気のせいか
とりあえず先に進むぞー