JavaScriptモード(三)

3423 ワード

JS字面量と構造関数
1.全体説明
  • 構造関数の使用をできるだけ避ける.
  • 必要に応じてオブジェクトを作成し、字面量
  • を選択するのに最適です.
    2.字面量文法
  • 対象包装は大括弧の中で
  • です.
  • 属性と方法は、名前と値によってカンマで区別されます.【注意:最後のカンマを付けないでください.IEは互換性がありません.】
  • 名前と値をコロンで分割する
  • 割当後、右大かっこの後に番号
  • があります.
    フォーマットは以下の通りです
       var objectName = {
          propName: value,
          methodName: function(){
              //todo
          }
       };
    
    3.構造関数の本質
  • JSにはクラスの概念がありません.関数を使ってクラスの用法を実現しただけです.
  • は、new Object(value)のコンストラクタを使用しないでください.作成値の種類を動的に決定し、予期せぬ結果をもたらすことがあります.
    構造関数の本質:
       var Constructor = function(value){
          this.propName = value;
          this.methodName = function(){
               //todo
          }
       }
    
    下記の過程に相当する(実際の状況ではない):
       var Constructor = function(value){
    
          //          
          //var this = {};
     
          //       
          this.propName = value;
          this.methodName = function(){
               //todo
          }
    
          //      
          //return this;
       }
    
    【説明】
  • は、上記の実質によって説明され、構成関数では、thisの代わりに他のオブジェクト値を返すことができますが、オブジェクト値である必要があります.そうでなければ、this
  • に戻ります.
  • 実際の状況では、thisは{}ではなく、他のプロトタイプから作成された
  • です.
  • 構築関数がnewを使用せずに動作すると、内部のthisは大域変数を指し、結果は予想外の
  • である.
    4.安全な構造関数モード
    new操作子の紛失を防止するための構造関数の誤用は、次のように構成関数を作成することができます.
       var Constructor = function(value){
          
          //       :   
          if(!this instanceof Constructor){
             return new Constructor();
          }
    
          //       :            
          if(!(this instanceof arguments.callee)){
             return new arguments.callee();
          }
    
          this.propName = value;
          this.methodName = function(){
               //todo
          }   
    
       }
    
    5.配列の構造関数
    配列は文字通りの量の構造と構造関数を使用しています.
       var arrayName = new Array(value1, value2, value3 ...);
    
    に等しい
       var arrayName = [value1, value2, value3 ...];
    
    【構造関数の問題】
    配列の構造関数を使うと、次のような問題があります.
       //     n   
       var arrayName = new Array(n);
       
       //arrayName[k]           undefined
    
    【配列属性のチェック】
  • typeofオペレータを使用して、Object
  • に戻ります.
  • Array.isArray()方法を使用しているが、一部の環境では
  • を使用できない.
  • カスタム方法:
  •    if(typeof Array.isArray === "undefined"){
          Array.isArray = function(arg){
             return Object.prototype.toString.call(arg) === "[object Array]";
          }
       }  
    
    6.JSONデータ
  • JSONと字面量オブジェクトの違い:JSONはキー−値ペアであるが、キー名は文字列(引用符で包装する)
  • でなければならない.
  • JSONデータの解析と序文化
  •   //  
      var objectName = JSON.parse(jsonString);
    
      //   
      var jsonString = JSON.stringify(objectName);
    
    7.正規表現
    コンストラクタ生成:
      var re = new RegExp(regexString,option);
      //option: "g" "m" "i"  
    
    【説明】:
  • 正規表現は意味を切り替える必要があります.読みにくいです.
  • newオペレータを使用してもいいですか?
    文字数の生成:
      var re = /regexString/option
      //option: g m i   ,      
    
    【説明】
  • 以前のバージョンでは、1つの字面量が作成された後、戻るオブジェクトは同じで、新しいバージョンは
  • に変更されました.
    8.エラーオブジェクト
    内蔵されているエラーオブジェクトは、構造関数で作成できます.
  • Err()
  • SyntxError()
  • Type Errer()内蔵オブジェクトは、以下の2つの属性があります.
  • name:エラーの名前は、一般的に構造関数の名前
  • です.
  • メッセージ:オブジェクト作成時に付随するメッセージ
  • 【カスタムエラーオブジェクト】
    任意のオブジェクトをスローすることで、カスタムオブジェクトを作成できます.
       try{
          
          throw{
            name:value,
            message:value,
            propName:value,
            methodName:function
          };
    
       } catch(e){
          //todo
       }