javascript対象技術基礎(三)
3896 ワード
関数javascript関数はみんながたくさん書いたと信じていますので、ここでは簡単に紹介します.関数を作成します.function f(x){…}var f=function(x){}上の2つの形式はいずれもf()という関数を作成できます.後の形式では匿名関数定義を作成する時にパラメータを設定できます.関数に渡すパラメータの数が足りない場合は、関数の数を指定できます.一番左から順に対応して、残りはundefinedで値を割り当てます.関数に伝えるパラメータが関数定義パラメータの数より多い場合、多くのパラメータは無視されます.
したがって、定義された関数については、すべてのパラメータをコーディネーターが転送することは期待できません.必要なパラメータについては、関数体で検出するか、またはデフォルト値を設定してパラメータと動作してパラメータを取得します.
関数のargments属性はそれぞれの関数体の内部にあるアーグメンツ識別子であり、この識別子はアーグメンツオブジェクトを表しています.アーグメンツオブジェクトは非常にAray(配列)オブジェクトと似ています.例えば、length属性があります.アクセスする値はインデックスでパラメータ値にアクセスしますが、両者は全く違っています.表面上の共通点だけです.(例えば、Agmentsオブジェクトのlength属性を変更すると、その長さは変わりません).
Method--方法は関数です.各オブジェクトには0つ以上の属性が含まれています.属性は任意のタイプであってもいいです.もちろん、対象も含まれています.関数自体はオブジェクトですので、一つの関数を一つのオブジェクトに入れることができます.この関数はオブジェクトの一つの方法になります.その後、この方法を使うなら、オブジェクト名で「.」を利用できます.オペレータが実現する
メソッドの呼び出しにはオブジェクトのサポートが必要ですが、オブジェクトの属性はどのように取得できますか?
次はもっと対象に向かう例を示します.
上記の例では、person.name=.を用いて直接的にpersonのname属性を変えることができます.ここでは先ほど述べた内容を示すためだけに、person属性を変更する方法として、一つのfunctionを定義し、二つのパラメータを受信します.一つはpersonで、一つはnameの値です.どちらの方法がいいですか?例の方法がよりイメージ的で、より直感的です.そして、オブジェクトに向かって影があるようです.もう一度強調してみます.方法自体が関数です.ただし、方法の使用はより制限されています.関数の場合は、上記の内容は同じ方法に適用されます.逆に、関数のprototype属性は各関数に一つのプロトタイプの属性が含まれています.この属性はjavascriptの対象に向けた核心的な基礎を構成しています.後で詳細に検討します.
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の対象に向けた核心的な基礎を構成しています.後で詳細に検討します.