※本ページでまとめているのはES6より前の時代のJavaScriptの話です

言語・開発環境

JavaScript

AJAX関連

一般記事

ECMAScript

  • ActionMonkey
    • SpiderMonkey と Tamarin を統合しようというプロジェクト。
    • Mozilla 2 での実現を目指しており、Firefox 4 あたりに搭載予定。
  • ScreamingMonkey
    • ブラウザ固有のスクリプトエンジン機構を Tamarin に搭載して、Tamarin が他のブラウザでも動作できるようにするプロジェクト。
    • 現在、IE 上で動くプロトタイプができているらしい

関連記事

JavaScriptは「プロトタイプ・ベースのオブジェクト指向言語」である件

  • タイプ・クラス・プロトタイプ - OOの語彙 2008.4.13
    • オブジェクトを作るには、二通りの方法がある。
      • 1. 設計図どおりに作る
      • 2. すでにあるオブジェクトをパクる
    • 最初に普及したのが、1のやり方で、設計図はクラスと呼ばれている。クラスはあくまで設計図なのでオブジェクトではない。型がデータそのものでないのと同じように。
    • ところが、JavaScriptのおかげで2のやり方が注目されるようになった。すでにオブジェクトがあるなら、それを「コピー」して、違うところだけ後付すればいい。このコピーの元をプロトタイプと言う。母となるオブジェクトから子となるオブジェクトを作るというわけだ。
    • このやり方でオブジェクトを作る言語を、プロトタイプ型オブジェクト指向言語(prototypal object-oriented language)とかプロトタイプベース(prototype-base OO)と呼んでいる。それと区別する意味で、クラスを元にオブジェクトを作る言語はクラスベース(class-base OO)と呼ぶようになった。
  • JavaScriptには言語仕様としてのクラスはないが、クラスに相当する機能としてコンストラクタが存在する。関数オブジェクトをnewすることでオブジェクトのコンストラクタとなる。
  • コンストラクタは、クラスの変数とメソッドのコンテナとして機能する。(つまり、JavaScriptのコンストラクタはクラスベースオブジェクト指向言語におけるクラス定義に相当するもの、と考えてよいと思われる)

JavaScriptにおけるオブジェクト

オブジェクトのプロパティ

  • オブジェクト初期化式の例
    var Numeric = { type: 'class', 'defined': 'native', 1: 'one' }; 
    alert(Numeric.type);          → classと表示
    alert(Numeric.defined);       → nativeと表示
    alert(Numeric['type']);       → classと表示
    alert(Numeric['defined']);    → nativeと表示
    alert(Numeric[1]);            → oneと表示
  • プロパティ値を参照、設定するには「.」に続けてプロパティ名を指定する方法と、[]内にプロパティ名を指定する方法の2種類があります。
  • 数値を指定した場合は「.」記法は利用できません。
  • オブジェクト初期化式に名前を指定した場合であっても、[]内に指定する場合は文字列にする必要があります。
  • プロパティ値として関数オブジェクトも指定できます。
  • []記法を使うことで、オブジェクトを事実上連想配列として使うことが可能
  • for inループによってプロパティを列挙できる
     var Numeric = { type      : 'class', 
                     'defined'  : 'native', 
                     1          : 'one' }; 
     for( var i in Numeric){
       alert('i=' + i + ',Numeric[i]=' + Numeric[i]);
     }
  • プロパティは属性を持っている
    • DontEnum:for inで列挙されない
    • DontDelete:deleteできない
    • ReadOnly,Internal
  • プロパティの属性はプログラムから制御することはできない

関連記事

関数オブジェクト

  • JavaScriptの関数はFunctionクラスのオブジェクトである
    <head>
       <script type="text/javascript">
         function a() {
           alert("hogehoge");
         }
         var init = a;
       </script>
     </head>
     <body onload="init()">
     </body>
  • 無名関数の定義
    var obj=new Object();
    obj.method = function(arg)
    {
      alert(arg);
    }
    obj.method("test");
  • 関数オブジェクトのFunctionコンストラクタによる定義
    var myFnc = new Function('関数名', '関数の処理内容');
  • Functionクラスにはcall()、apply()メソッドがあり、関数の呼出はcall()やapply()で代替できる
    var arr=[];
    arr.push("1","2"); //という処理をしたいとすると
    //push()をapply()で書き換え
    Array.prototype.push.apply(arr,['1','2']);
    //push()をcall()で書き換え
    Array.prototype.push.call(arr,"1","2");
    • 第一引数で渡すオブジェクトにnullやundefinedを渡すとthisはグローバルオブジェクト(ブラウザ環境であればwindowオブジェクト)になる
  • 高階関数
    • 関数の引数として関数オブジェクトを渡すこと
  • 関数の引数
    • 関数の引数の数はCやJava,C#のように厳密には扱われない
    • 渡した引数が足りないときは undefined として扱われる
    • 渡した引数が多すぎるときは arguments[n]で参照できる(添え字は0ベース)
    • arugumentsは関数の中で暗黙に与えられているオブジェクト

関連記事

prototypeによる継承について

  • JavaScriptはクラス指向の継承ではなく、プロトタイプ指向の継承を備えている。
  • 暗黙の参照:prototypeプロパティに設定されたオブジェクトのプロパティは、元のオブジェクトのプロパティのように外部から参照できる。JavaScriptではこのことを利用してオブジェクトの継承関係を作成する。
  • ただし、この「暗黙の参照」はプロパティの値を読むときだけで、値をセットしたりdeleteするときには行われない。
  • prototypeはすべてのオブジェクトにあるので多段に暗黙の参照をすることができる。これをプロトタイプ・チェーンという
    <!--プロトタイプチェーンのテスト -->
    <script language="javascript" type="text/javascript">
    var obj1 = new Object();
    obj1.a = "obj1のプロパティa";
    
    //Hogeクラスを作る=function Hogeを定義
    function Hoge(){}
    Hoge.prototype = obj1; //Hogeのprototypeにobj1を使う
    
    var obj2 = new Hoge();
    
    //Hoge2クラスを作る
    function Hoge2(){}
    Hoge2.prototype = obj2;
    
    var obj3 = new Hoge2();
    
    alert('obj3.a='+ obj3.a);
    </script>

関連記事


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-01-08 (水) 11:58:30 (422d)