javaScript面象オブジェクト3


関数javascript関数はみんながたくさん書いたと信じていますので、ここでは簡単に紹介します.関数を作成します.function f(x){…}var f=function(x){}上の2つの形式はいずれもf()という関数を作成できます.後の形式では匿名関数定義を作成する時にパラメータを設定できます.関数に渡すパラメータの数が足りない場合は、関数の数を指定できます.一番左から順に対応して、残りはundefinedで値を割り当てます.関数に伝えるパラメータが関数定義パラメータの数より多い場合、多くのパラメータは無視されます.
function myprint(s1,s2,s3) {   
    alert(s1+"_"+s2+"_"+s3);   
}   
myprint();      //undefined_undefined_undefined   
myprint("string1","string2"); //string1_string2_undefined   
myprint("string1","string2","string3","string4"); //string1_string2_string3  
 
したがって、定義された関数については、すべてのパラメータをコーディネーターが転送することは期待できません.必要なパラメータについては、関数体で検出するか、またはデフォルト値を設定してパラメータと動作してパラメータを取得します.
function myprint(s1,person) {   
    var defaultperson = {   //  person     
        "name":"name1",   
    "age":18,   
    "sex":"female"  
    };   
    if(!s1) {    //s1        
        alert("s1 must be input!");   
    return false;   
    }   
    person = person || defaultperson;  //  person       
    alert(s1+"_"+person.name+":"+person.age+":"+person.sex);   
};   
  
myprint(); //s1 must be input!   
myprint("s1"); //s1_name1:18:female   
myprint("s1",{"name":"sdcyst","age":23,"sex":"male"});  //s1_sdcyst:23:male  
関数のargments属性はそれぞれの関数体の内部にあるアーグメンツ識別子であり、この識別子はアーグメンツオブジェクトを表しています.アーグメンツオブジェクトは非常にAray(配列)オブジェクトと似ています.例えば、length属性があります.アクセスする値はインデックスでパラメータ値にアクセスしますが、両者は全く違っています.表面上の共通点だけです.(例えば、Agmentsオブジェクトのlength属性を変更すると、その長さは変わりません).
function myargs() {   
    alert(arguments.length);   
    alert(arguments[0]);   
}   
myargs();   //0  ---  undefined   
myargs("1",[1,2]);  //2 --- 1  
 AgmentsオブジェクトにはカレントAgmentsオブジェクトがある方法を示すcalee属性があります.匿名関数の内部再帰的呼び出しを実現するために使用できます.
function(x) {   
    if (x <= 1) return 1;   
    return x * arguments.callee(x-1);   
}  (section8.2)  
 
Method--方法は関数です.各オブジェクトには0つ以上の属性が含まれています.属性は任意のタイプであってもいいです.もちろん、対象も含まれています.関数自体はオブジェクトですので、一つの関数を一つのオブジェクトに入れることができます.この関数はオブジェクトの一つの方法になります.その後、この方法を使うなら、オブジェクト名で「.」を利用できます.オペレータが実現する
var obj = {f0:function(){alert("f0");}}; //           
function f1() {alert("f1");}   
obj.f1 = f1;    //          
  
obj.f0(); //f0  f0 obj      
obj.f1(); //f1  f1 obj      
f1();     //f1  f1        ,         
f0();     //f0   obj   ,           
 
メソッドの呼び出しにはオブジェクトのサポートが必要ですが、オブジェクトの属性はどのように取得できますか?
var obj = {"name":"NAME","sex":"female"};   
obj.print = function() {  //          
    alert(this.name + "_" + this["sex"]);   
};   
obj.print();  //NAME_female   
obj.sex = "male";   
obj.print();  //NAME_male  
 
次はもっと対象に向かう例を示します.
var person = {name:"defaultname",   
              setName:function(s){   
              this.name = s;   
          },   
          "printName":function(){   
              alert(this.name);   
          }}   
person.printName();       //defaultname   
person.setName("newName");   
person.printName();       //newName  
  
上記の例では、person.name=.を用いて直接的にpersonのname属性を変えることができます.ここでは先ほど述べた内容を示すためだけに、person属性を変更する方法として、一つのfunctionを定義し、二つのパラメータを受信します.一つはpersonで、一つはnameの値です.どちらの方法がいいですか?例の方法がよりイメージ的で、より直感的です.そして、オブジェクトに向かって影があるようです.もう一度強調してみます.方法自体が関数です.ただし、方法の使用はより制限されています.関数の場合は、上記の内容は同じ方法に適用されます.逆に、関数のprototype属性は各関数に一つのプロトタイプの属性が含まれています.この属性はjavascriptの対象に向けた核心的な基礎を構成しています.後で詳細に検討します.