「対象技術を用いた高度なWebアプリケーションの作成」ノート

2056 ワード

作者は女の子を面接して、女の子は4、5年のJSの経験があるが、実際にはJSについてあまり知らないことに気づいた.作者は考えてから、最終的に明かりをつけて油を煮る(脳補)、この経験談があった.
原文:Create Advanced Web Applications With Object-Oriented Techniques
日文:オブジェクト指向のテクノロジーを使用した高度なWebアプリケーションの作成
JavaScriptオブジェクトは辞書です
C++またはC#では、オブジェクトについて話すときにクラスまたは構造のインスタンスを指します.オブジェクトには、インスタンス化されたテンプレート(クラス)に応じて異なるプロパティとメソッドがあります.JavaScriptオブジェクトはそうではありません.JavaScriptでは、オブジェクトは名前/値ペアのセットにすぎません.つまり、JavaScriptオブジェクトを文字列キーを含む辞書と見なします.
JavaScriptオブジェクト/辞書は、Python辞書のようにハッシュ可能なオブジェクトではなく、文字列キーワードのみを受け入れます.
JavaScript関数一流
多くのプログラミング言語では、関数とオブジェクトは通常2つの異なるものと見なされます.JavaScriptでは、その違いがあいまいです.JavaScript関数は、実際にはそれに関連付けられた実行可能なコードを持つオブジェクトです.
  • オブジェクトにメソッドを追加するのは簡単です.名前を選択し、関数を名前に割り当てるだけです.そこで,匿名関数をそれぞれ対応するメソッド名に割り当てることで,オブジェクトに3つのメソッドを定義した:
  • JavaScriptの関数はオブジェクトです.各関数オブジェクトにはcallというメソッドがあり、関数を最初のパラメータとして呼び出すメソッドがあります.すなわち、関数の最初のパラメータとしてcallに渡されるオブジェクトは、関数呼び出しで「this」の値になります.
  • は、「this」(所属オブジェクトがない)を含む関数を決して呼び出さないでください.そうでなければ、呼び出しで「this」がグローバルオブジェクトを参照するため、グローバルネーミングスペースに違反します.これはアプリケーションに災害をもたらすに違いありません.たとえば、次のスクリプトは、JavaScriptのグローバル関数isNaNの動作を変更します.絶対そんなことしないで!

  • alert(“NaN is NaN: “ + isNaN(NaN));
    
    function x() {
        this.isNaN = function() { 
            return “not anymore!”;
        };
    }
    // alert!!! trampling the Global object!!!
    x();
    alert(“NaN is NaN: “ + isNaN(NaN));
    

    コンストラクタはクラスではありません
    Javascriptにはクラスがありません.関数はnew演算子とともに使用されると、コンストラクション関数として機能します.「new」演算子は簡単に実行できます.まず、新しい空のオブジェクトを作成します.その後、後続の関数呼び出しを実行し、新しい空のオブジェクトを関数の「this」の値に設定します.
    var spot = new DogConstructor(“Spot”);
    

    同等:
    var spot = {}; 
    DogConstructor.call(spot, “Spot”);
    

    プロトタイプ
    JavaScriptでは、各関数に「prototype」というプロパティがあり、プロトタイプオブジェクトを参照します.このプロトタイプオブジェクトは、関数自体を逆に参照する「constructor」というプロパティとも呼ばれます.これは循環参照です
    静的プロパティとメソッド
    クローズドパッケージ
    プライベート属性のシミュレーション
    クラスから継承
    シミュレーションネーミングスペース
    JavaScriptにはネーミングスペースをサポートする特定の言語機能はありませんが、オブジェクトを使用してネーミングスペースをシミュレートするのは簡単です.JavaScriptライブラリを作成する場合は、グローバル関数やクラスを定義することなく、ネーミングスペースにパッケージできます.