みこむらめもむらむらむら

なんかHTML5とかJS勉強とかやりながらめもを綴るブログ

【JavaScript】オブジェクトとは

あ、テキストは下記を使用して勉強中
JavaScript本格入門 ~モダンスタイルによる基礎からAjax・jQueryまで
次はオブジェクトだよ!

主役は「モノ」そのもの

JavaScriptのオブジェクトは
名前をキーにアクセスできる配列、要は連想配列である
と説明した

うむ、たしかにしている
【JavaScript】データ型のオブジェクトリテラル(object)のとこね

これはJavaScriptのオブジェクトを
実装的な視点からとらえるといった意味では正しいが
オブジェクトという概念そのもを説明するには不十分である

  • オブジェクト
    • 単に名前がついた入れ物の集合ではない
    • オブジェクト自体が一つのモノであり、中に含まれる要素は、このモノの特性や動作を表すために存在する
    • (連想配列ではなく)「オブジェクト」という言葉を使う場合には、主役は個々の要素ではなく、オブジェクト(モノ)そのものである

なんのことかなんとなくしかわからないのだが
例を見てなんとなくはあく

  • 連想配列の場合
    • 複数要素の集合体(個々の要素が主体)

配列data

  • X0001
    • 山田
  • X0002
    • 鈴木
  • Z0099
    • 佐藤
  • U0108
    • 田中
  • オブジェクトの場合
    • ひとつのモノを表現するために複数の属性情報を持つ(モノ全体が主体)

Memberオブジェクト

  • name
    • 山田
  • sex
  • birth
    • 1983/10/20
  • address
    • 東京都‥

複数の属性情報って言い回しが
イメージしやすかったーなるほどー

プログラム上で扱う対象をオブジェクト(モノ)に見立てて
オブジェクトを中心としてコードを組み立てていく手法を
オブジェクト指向という
ほっほーなるほどです

オブジェクト=プロパティ+メソッド

オブジェクトはプロパティメソッドとから構成される
ここでプロパティとメソッドキタ(゚∀゚)コレ
お久しぶりですね
プロパティとは
「オブジェクト(モノ)の状態や特性を表すための情報」のこと
対してメソッドは
「オブジェクト(モノ)を操作するための道具」
何言ってるかわからないので例を

オブジェクト:プログラムで扱う対象
例>>フォームを表すFormオブジェクト

  • プロパティ:モノの状態や特性を表す情報
    • フォームの名前
    • フォームの送信先URL
    • フォームに含まれる要素群
    • etc..
  • メソッド:モノを操作するための道具
    • フォームを送信する
    • フォームをクリアする
    • フォームを無効化する
    • etc..

プロパティ/メソッドという視点から見たとき
オブジェクトとは
「データを操作するためのさまざまな機能を持った」高機能な入れ物といえる

オブジェクトを利用するための準備(new演算子)

オブジェクト指向の世界では
後述するような例外を除いて
もともと用意されたオブジェクトを
直接利用することを認めていない
「自分自身の中でデータを保持できる」という性質を持っている
ふむ‥

たとえばオブジェクトに対して
アプリケーションが複数の箇所から
異なる目的で同一のプロパティを対象に
データを書き込んでしまったら
当然データは互いに衝突して
アプリケーションは正しく動作しない

そのためオリジナルのオブジェクトには手を加えず
「オリジナルを複製したコピー」を操作することで
データの競合を防ぐようになっている

このようにオブジェクトの複製を作ることをインスタンスという
また、インスタンス化によってできる複製のことをインスタンスという
インスタンス化とは
「オブジェクトを扱うための『自分専用の領域』を確保する行為」
と言い換えられる

オブジェクトをインスタンス化するには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では基本データ型と
オブジェクトとしての体裁を持つラッパーオブジェクトとを
自動的に相互変換するため
アプリケーション開発者がこれを意識する必要はない





ふむふむ‥なんか全体的に
‥‥‥(゚ロ゚;)ポカーン
なんだけれど概念的なところを聞いたら
ちょっとわかってきた、気がしている
気のせいか
とりあえず先に進むぞー