『JavaScriptプログラミング精解』簡明読書心得-下

4028 ワード

これは『JavaScriptプログラミングの精解』の簡明な読書の心得の下半分です.この本の後半にはクライアントJavaScriptの2章があります.この部分は内容が複雑で、概念が簡単で、多くの仕事がJQueryで完成できるので、私がこの本を読んだとき、この部分を直接閲覧しました.したがって、この後半には2つのセクション、モジュール化、正規表現しかありません.
モジュール化JavaScript
プライベートフィールドをC#で簡単にクラスに宣言したり、クラスを継承したり、インタフェースをカプセル化したり、ネーミングスペースを生成したりするよりも、JavaScriptはモジュール化されたオリジナルのサポートを提供していません.実際には、いくつかのJavaScriptの特性によってモジュールの特徴を「シミュレーション」するしかありません.モジュールの特徴は「パッケージ」であり、モジュールの使用者はモジュール内の詳細を知らないことができ、他のモジュールが変化した場合、自身が変わらず、コードの多重性を強化することを目的としている.JavaScriptでは、次の2つの機能によって実行されます.
  • 1、関数内部の局所変数が外部に見えない(閉包)
  • 2、オブジェクトのフィールドはオブジェクト呼び出しのみ(これはまたくだらない話のようだ)
  • 変数を関数でカプセル化し、グローバルな役割ドメインに表示する必要のない変数がグローバルな役割ドメインに表示されないようにします.たとえば、円柱と円錐の体積を計算する関数を取得したい場合は、次のようにします.
    var PI = 3.1415926;
    var circleArea = function(theCircle) { return theCircle.radius*theCircle.radius*PI; }
    var cylinderVolume = function(theCylinder) {  return circleArea(theCylinder.circle)*theCylinder.height; }
    var taperedVolume = function(theTapered) {  return circleArea(theTapered.circle)*theTapered.height/3; }

    ブラウザがこの4つの文を説明した後、cylinderVolumeとtaperedVolumeの2つの関数を取得しましたが、PIとcircleAreaも取得しました.これはあなたがしたいことではありません.言い換えれば、グローバルな役割ドメインはPIとcircleAreaによって「汚染されています」ことに注意してください.前のスクリプトファイルにもう一つのPI=1.414が定義されているのか、円面積を計算する方法circleAreaしか身につけていないのか、他の人にも便利に使われたくない(というかCOM技術ではなくJavaScriptを使っている以上、どんなに世代コードを歪めても秘密は解析されます.ソースコードは公開されているからです).君はこの二人をカプセル化すべきだ.次の実装が望ましいかもしれません.
    function createFunction(){
        var PI = 3.1415926;
        var circleArea = function(theCircle) { …… }
        var cylinderVolume = function(theCylinder) {  …… }
        var taperedVolume = function(theTapered) {  …… }
        window.cylinderVolume = cylinderVolume;
        window.taperedVolume = taperedVolume;
    }
    createFunction();

    Windowsはブラウザウィンドウオブジェクトで、すべての「グローバル変数」はwindowの属性です.この関数を実行すると、windowオブジェクトは円柱と円錐の体積を計算する2つの関数しか得られず、後のコードでこの2つの関数を簡単に呼び出すことができます.PIとcircleAreaはcreateFunction定義の終了に伴って解放されず、taperedVolume関数を呼び出すと「閉パッケージ」の特性としてブラウザによって維持される場所に保存されます.
    よく考えてみると、上記の実装には問題があります.それは変数createFunctionを汚染しているということです.匿名関数を使用したほうがいいかもしれません.次は最高の実装です.
    function(){
        var PI = 3.1415926;
        var circleArea = function(theCircle) { …… }
        var cylinderVolume = function(theCylinder) {  …… }
        var taperedVolume = function(theTapered) {  …… }
        window.cylinderVolume = cylinderVolume;
        window.taperedVolume = taperedVolume;
    }();

    このように,関数内の局所変数が達成できないという特徴を利用して,モジュールのパッケージ化が完了し,cylinderVolumeとtaperedVolumeが対外交流のインタフェースである.PI値と円面積を計算する論理を体積を計算する関数に直接書けばいいのではないでしょうか.しかし、関数の規模が十分大きい場合、あなたはきっとそうしたくないに違いありません.
    オブジェクトのプロパティを使用してフィールドをカプセル化するのは簡単です.オブジェクト(名前の値のペア)自体がオブジェクト向け言語のオブジェクトをシミュレートするために使用されるので、オブジェクト名でオブジェクト内部のプロパティにアクセスするのは当然です.
    正規表現
    正規表現は非常に柔軟な文字列マッチング方法を提供し,フォーム検証のような分野で強い応用があることが予想される.この前サイの本を読んでいたときに持っていったので、今回は完全にマスターすることは期待できませんが、少し整理したいと思っています.
    次に、正規表現の簡単な適用を示します.1は、インデックス(0から)が1の場所で最初の一致elを見つけることができることを示します.
    var text = “hello”;
    text.search(/el/);//->1

    正規表現はスラッシュで始まり、スラッシュで終わり、中間の内容は一致する内容です.正規表現は、ワイルドカードで文字列を一致させることができます.
    “1a 2 3d”.search(/\s\d\s/); //->3    a   “  2  ”

    共通のワイルドカードもいくつかあります.
    ワイルドカード
    釈然としない
    \d
    任意の数値
    \w
    任意の単語
    \s
    任意の空白文字:タブ、改行、スペース
    \b 
    単語境界たんごきょうかい:句読点、スペース、文字列の先頭と末尾
     .
    改行文字以外の任意の文字
    正規表現では、中かっこ[]と[]の間の部分は任意の文字に一致する一致を表し、アスタリスクとプラス記号はそれぞれ任意の回数と少なくとも1回の繰り返しを表す.
    “abccxa”.search(/[xyz]/); //->4
    “abccxa”.search(/c*xa/); //->4

    文字列はsearchメソッドのほかに、一致する文字列を置換するためにreplaceメソッドがあり、matchメソッドは一致が見つかったかどうかを検出します.
    最後に書いた言葉
    2日かけてこの小さな本を読み終えたが,いくつかの収穫は基本的にこの2編の博文に書かれている.JavaScriptにこんなに多くの欠点がある以上、OOPはシミュレーションされており、イベントメカニズムもシミュレーションされており、関数を呼び出すときにパラメータもチェックされていないのに、なぜそれを学ぶのかと聞かれるかもしれません.まず、JavaScriptの本質は簡単で、このような簡単な基礎の上で抽象的な問題を構築する思想は学ぶ価値がある(突然「閉包」を理解したとき、設計者の考えは本当に素晴らしいと思います).次に、JavaScriptは「すぐに現れる」言語として、やりたいことを手伝ってくれます.ゲームを開発する--WebGL公式demoの中にレーシングカーゲームがあります.まるでCOOLです.