メインコンテンツに移動

メインナビゲーション

  • ホーム
  • サイトマップ
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • JavaScriptのオブジェクト(Objects)は変数とメッソドの集合体で、複合型と単純型として分類され

JavaScriptのオブジェクト(Objects)は変数とメッソドの集合体で、複合型と単純型として分類され

javascript
development
javascript

JavaScriptのオブジェクトを深く理解するに実は難しい。ここで、オブジェクトのプロトタイプの概念を省いて(別途説明、プロトタイプの概念を利用しなくてもJavaScriptのコーティングが可能)、ほかのオブジェクト指向言語(例:Java)の経験があって、その対象にJavaScriptのオブジェクト構成、定義、生成、使用などを調査して、理解したことを求めた。オブジェクトの基本を理解するのは、JavaScriptへの理解の基礎になる。

ここでのオブジェクト(objects)がさまざまな要素に指しているので、Object()タイプのみのオブジェクトに限定していない。Object()がJavaScriptのオブジェクトの一種類だけ、空白のオブジェクトである。もちろんJavaScriptのすべてのオブジェクト(objects)がObjectに継承しているので、その特定なObjectタイプに関連がある。

オブジェクト(Object)は変数とメッソドの集合体である

  • JavaScriptのオブジェクトがハッシュテーブル(Hash Table)と言われている
  • 任意の変数名と値のペアーが含まれている
  • 2種類の変数:プロパティ(property)とメッソド(method)からなる
  • プロパティの値は任意タイプのオブジェクト(例:String、Numberなど)
  • メッソドは関数から構成される(何かの処理)

JavaScriptのデータ型が複合型(complex type)と単純型(simple type)として分類される

  • 単純型(simple type)がプリミティブ型(primitive type)とも言う
    • 単純型が5種類ある
      • string
      • number
      • boolean (true, false)
      • null
      • undefined
    • 単純型データが単なる値、オブジェクトのように見えるが(メッソドがあり)、プロパティがなく(複数の値を持つことができない)、オブジェクトではない
      • null、undefinedはオブジェクトの振る舞いはない
      • string、number、booleanがオブジェクトの振る舞いはある。これはJavaScriptがメッソドにアクセスする際にそのラッパーオブジェクトが返され、参照が終わったらラッパーオブジェクトが消滅にとなる動きである。
        var x = 10 ;
        console.log( x.toString() ) ;  //  "10"が表示される。 
                                       //  toString()などのメッソドがラッパーオブジェクト(String)に付与された
        
    • 単純型データが変数と関連づけ、スタック(Stack)に保存される。その変数が直接に値にアクセスする
  • 複合型(complex type)がリファレンス型(reference type)とも言う
    • 複合型が9種類ある
      • Object
      • Boolean
      • String
      • Number
      • Math
      • RegExp
      • Array
      • Function
      • Date
    • 複合型データがオブジェクトのコンストラクタから生成されたインスタンスである
    • 複合型データがメモリのヒップ(heap)に保存される。関連付けられた変数がポインターであり、データ保存された場所に指している。

単純型データが値で評価、複合型データが参照評価

  • 単純型(プリミティブ)データが値で評価する。値が同じであればすべて同じとなる
  • 複合型(オブジェクト)データが元生成された値を参照して評価する

すべてのオブジェクトインスタンスがあるコンストラクタから生成される

  • ネイティブ・オブジェクト・コンストラクタ(Build-in)とカスタム・コンストラクタ(関数コンストラクタ)に「new」でオブジェクトインスタンスを生成する。
  • String、Number、Booleanのリテラルでプリミティブ値(オブジェクトインスタンスではない)が生成される
    var x = 10 ;
    var x = Number( 10 ) ;
    
    var str = "aaa" ;
    var str = String( "aaa" ) ;
    
    var b = true ;
    var b = Boolean( true ) ;
    
  • Mathが例外な存在である。Javaの例でみるとstaticのような存在で、すでにオブジェクトになっているため、「new」で新しいインスタンスの作成ができない。
    • Mathのプロパティ、メソッドを呼び出して、プリミティブ値を作成することができる
      new Math.PI     // このオブジェクトではサポートされていない操作
      Math.PI         // "3.141592653589793"が表示され
      
  • String、Number、Booleanコンストラクタに「new」でオブジェクト・インスタンスになる => プリミティブ値ではない
    var s1 = new String( "aaa" ) ;
    var s2 = new String( "aaa" ) ;
    console.log( s1 == s2 );        // false と表示される
                                    // 同じ値だが、オブジェクトが同じではない
    typeof s1                       // "object" と表示される
                                    // [object String] {0:"a", 1:"a", 2:"a", leangth:3}
    

String,Number,Boolean型の値にオブジェクト型インスタンス生成にお勧めしない

  • String,Number,Boolean型の値がプリミティブとオブジェクト型ができるが、文字/数字/真・偽が単なる値なので、オブジェクトインスタンスの生成必要がない
  • オブジェクトインスタンスを生成したら、値の表示が面倒になる
    var s1 = new String( "aaa" ) ;
    var s2 = new String( "aaa" ) ;
    console.log( s1.toString() == s2.toString() ) ;  // 「s1==s2」で評価はできない
    
    

オブジェクトがダイナミックなプロパティを慎重に使用したほうがいい

  • オブジェクトが生成した後に、プロパティの追加、削除ができる
    function Human(p1, p2){
      this.name = p1;
      this.age = p2 ;
    }
    var person_1 = new Human( "Tiffany", 25 ) ;  // オブジェクトの作成
    
    person_1.gender = "female" ;                 // プロパティを追加する
    console.log( person_1.gender ) ;             // 「female」が表示され
    
    delete person_1.name ;                      // プロパティの削除
    console.log( person_1.name ) ;              // 「undefined」と表示され
  • 規模の小さいプロジェクトであれば、オブジェクトが生成後にプロパティ、メッソドなどが自由に追加、削除ができて便利だが、プロジェクトの規模が大きくなると、プロパティの管理、デバッグが大変となり、混乱を引き起こしやすく、あまり使用しないほうがいいtではないか。
ホーム

古松

検索

Article Category

  • apache(7)
  • css(19)
  • drupal(295)
  • Electron(4)
  • html(34)
  • javascript(27)
  • laravel(4)
  • linux(5)
  • macOS(2)
  • mysql(13)
  • php(19)
  • python(4)
  • SEO(12)
  • video(72)
  • Visual Studio Code(4)
  • windows(13)
  • wordpress(32)