JavaScriptミドルノート(2)


オブジェクトはJavaScriptを構成する基本ユニットです.この章では、JavaScript言語の最も重要な部分について説明します.参照、関数のリロード、役割ドメイン、閉パッケージ、コンテキストです.これらの知識があれば,オブジェクト向けの開発が簡単になる.
1、参照
リファレンスは、オブジェクトの実際の位置を指すポインタです.次の使用例を参照してください.
  
 <script type="text/javascript">
    /*    */
    var obj = new Object(); //       
    var newObj = obj; //         。
    obj.name = "rain";//        
    alert( newObj.name );
    alert( obj.name == newObj.name  );//                 
    </script>

この例では、2つのオブジェクトは同じオブジェクトを指し、あるオブジェクトのプロパティの内容を変更すると、別のオブジェクトに影響します.
もう1つの例を見てみましょう.今回は配列を利用して引用を説明します.
  
 <script type="text/javascript">
    /*    */
    var arr = new Array("a","b","c"); //      
    var newArr = arr; //          。
    arr.push("d");//     
    alert( newArr[3] );
    alert( arr.length == newArr.length  );//                   
    </script> 

arrが再定義されると、参照は次のコードに示すように、同じオブジェクトではありません.
   
<script type="text/javascript">
    /*    */
    var arr = new Array("a","b","c"); //      
    var newArr = arr; //          。
    arr = new Array("e","f"); //        
    //newArr arr          
    //arr    new Array("e","f");
    //newArr     new Array("a","b","c");
    alert(arr!=newArr);
    </script> 

次に、文字列の参照に関する比較的特殊な点の例を見てみましょう.
 
  <script type="text/javascript">
    /*    */
    var str = "a";
    var newStr = str;
    str = str + "b";//  str  ,  ,          ,       
    alert(str!=newStr);
    </script> 

この例に示すように、文字列操作を実行すると、結果は文字列の修正版ではなく、常に新しい文字列オブジェクトになります.
みんなが<の本の中の1節を見たことがあることを知らないで値と住所を伝えて、はっきり言って、引用です.興味があれば行ってみてください.
JavaScriptは、一連の他のオブジェクトへの参照を維持する言語であり、参照によってプログラムに大きな柔軟性をもたらすことができます.
2,関数リロード
関数リロードの特性は,入力された異なる数やタイプのパラメータに基づいて,関数をリロードすることによって異なる機能を発揮することである.それは2つのことに依存しなければならない:1つは伝達パラメータの数を判断することであり、2つは伝達パラメータのタイプを判断することである.
2-1、入力パラメータの数を判断する
JavaScriptの各関数には、lengthプロパティがあるが、この関数の範囲内でのみ機能する変数をパラメータと呼び、関数に渡されるすべてのパラメータを含む擬似配列である.
argumentsにより,この擬似配列を得ることができる.次のようになります.
  
 <script type="text/javascript">
    //             
    //obj      ,msg      
    function sendMsg( obj , msg ){
     if(arguments.length==2){
      alert(obj + "   :" + msg);
     }else{
      alert("      ,    ");
     }
    }

    //       
    sendMsg("hello");
    // 2    
    sendMsg("   ","hello");
    </script>

Argumentsは非常に有用なもので、任意の数のパラメータを配列に変換できる次の機能関数を見ています.
   
<script type="text/javascript">
    function makeArr(){
     var arr = [];//        
     for(var i=0;i<arguments.length;i++){
      arr.push( arguments[i] );//   
     }
     return arr;//    
    }

    var a = makeArr("a","b",3,4);
    alert(a.length);
    </script>

2−2、入力パラメータの種類を判定する
1つ目の判断方法:
判断タイプにはJavaScriptの別のオペレータであるtypeofが必要です.変数の内容のタイプを表すために使用され、文字列が返されます.たとえば、変数が文字列の場合、typeofの後には(「string」)が返されます.
よく次のような判断をします.
         
if( typeof num == "string" ){
                num = parseInt( num );//        ,          
           }    
           if( typeof arr== "string" ){
                arr= arr.split(",");//        ,           
           }    

たとえば、前のmakeArr()関数を文字列タイプしか受け入れられないパラメータに変更します.コードは次のとおりです.
  
 <script type="text/javascript">
    function makeArr(){
     var arr = [];//        
     for(var i=0;i<arguments.length;i++){
         if(typeof arguments[i] !="string"){ continue;};
         arr.push( arguments[i] );//   
     }
     return arr;//    
    }
    var a = makeArr("a","b",3,4);
    alert(a.length);
    </script>

最終結果a.lengthは2であり、後の2つのパラメータがnumberタイプであるためである.
2つ目の判断方法:
このメソッドでは、すべてのJavaScriptオブジェクトが持つプロパティを参照し、関数であるconstructorを構築する必要があります.このプロパティは、オブジェクトを構築するためにもともと使用されていた関数を参照します.
         
 if( num.constructor ==  String ){
                num = parseInt( num );//        ,          
            }    
            if( arr.constructor ==  String ){
                arr= arr.split(",");//        ,           
            }   
           if(  newArr.constructor ==  Array ){
                newArr = newArr.join(",");//       ,           
            }    

constructorを実行した結果はオブジェクトであり、typeofを実行した結果は文字列である.次の表の比較を見てください.
変数typeof変数constructor
{a:"b"}              "object"             Object
["a","b"]              "object"             Array
function(){}              "function"     Function
"a"                     "string"             String
66                      "number"             Number
true                      "boolean"             Boolean
new User()              "object"             User
入力パラメータの数とタイプを判断することで,関数の再ロードも簡単になる.