[推奨]javascript対象技術基礎教程
14560 ワード
その結果、長い間見ましたが、大体のことが分かりました.よく吟味してみたら、何も分かりませんでした.この文章は第7、8、9章を参考にして書いたものです.私もできるだけ原書の構造に従って、javascriptの対象技術(対象/配列−関数-)類/構造関数/原型を説明します.自分でも把握できないところに対して、英語の文言を添付します.参考にしてください.説明をしないなら、文に出てくるすべての英語の語句(プログラム体を除く)はすべて<>.------------------------------オブジェクトと配列(Objects and Arays)は何が対象ですか?いくつかの「名前・属性」の組み合わせを一つのユニットの中に置いて、オブジェクトを構成しています.javascriptの対象はいくつかの「キー・値」のペアの集合です.(An oject is a collection of named values.The named values.The named values are usually rerred to as properties to as properties of the.striesタイプは他の名前ではできません.属性の種類は、任意の(数字/文字列/その他のオブジェクト.).new Object()で空のオブジェクトを作成することができます.また、簡単に「{}」で空のオブジェクトを作成することもできます.この両者の役割は同じです.
[]にいくつかの表現を入れて属性の値を取ることができます.
例えば循環制御文で使用できますが、「.」操作子にはこのような柔軟性がありません.
オブジェクトのconstructor属性
各javascriptオブジェクトにはconstructor属性があります.この属性はオブジェクト初期化時のコンストラクタに対応しています.
オブジェクトは無秩序データの集合であり、配列は秩序データの集合であり、配列中のデータ(要素)は索引(0から開始)によってアクセスされると述べた.
配列中のデータは任意のデータタイプでも良いです.配列自体はまだオブジェクトですが、配列の多くの特性のため、配列とオブジェクトを区別します.
来てそれぞれ対応します.(Throughot this book、object and arrays arted treated as distinct datatypes.
This is a useful and reasonable simplification;you can treat object and arrays as separate types
for most of your JavaScript programming.To fully understand the behavior of object and arrays、
however,you have to know the truth:an array is nothing more than object with a thin layer of extra
functionlity.You can see this with the typeof operator:appied to an array value,it returns
the string“object”.--section 7.5).
配列を作成するには、[]操作子、またはAray()コンストラクタを使ってnew一つを操作できます.
Jsコード
javascriptの配列の長さは任意に変えられます.配列の内容も任意に変えられます.この初期化の長さは実際には
配列には拘束力がありません.1つの配列に対しては、その最大長さを超えるインデックスの割り当て値に対しては、配列の長さを変更します.一方で、値なしに対しては与えられません.
のインデックスにundefinedを割り当て、次の例を参照してください.
Jsコード
私たちはすでに配列のlength属性を使っています.length属性は読み書きできる属性です.つまり、配列のlength属性を変えることによって、私たちはできます.
配列の長さを変更します.lengthを配列の長さより小さい値に設定すると、元の配列のインデックスがlength-1より大きい値は削除されます.length
の値が元の配列の長さより大きい場合、それらの間の値はundefinedに設定されます.
Jsコード
上記の説明により、オブジェクトの属性値は属性の名前(文字列タイプ)で取得され、配列の要素は索で取得されることが分かりました.
参照(整数型0~2*32-1)は値を得ます.配列自体も対象ですので、オブジェクト属性の操作も行列にぴったりです.
Jsコード
javascript関数はみんながたくさん書いたと信じていますので、ここでは簡単に紹介します.
関数を作成:
関数定義時にパラメータを設定できます.関数に渡すパラメータの個数が足りない場合は、一番左から順に対応します.残りはundefinedで値を割り当てます.
のパラメータが関数定義パラメータの個数より多いと、多くのパラメータが無視されます.
Jsコード
を検出したり、デフォルト値を設定してパラメータと動作したりしてパラメータを取得します.
Jsコード
それぞれの関数の内部には、アーグメンントオブジェクトと非常に類似したオブジェクトを表すアーグメンント識別子があります.
Aray(配列)オブジェクトには、例えばlength属性があり、その値にアクセスするには、インデックスを用いてパラメータ値にアクセスする「[]」操作子がありますが、両者は全く違っています.
ものは、表面に共通点があるだけです.
Jsコード
方法は関数です.各オブジェクトには0つ以上の属性が含まれています.属性は任意のタイプでもいいです.もちろん、オブジェクトも含まれます.関数自体は1つです.
対象としては、関数を一つのオブジェクトに入れることができます.この関数はオブジェクトの一つの方法になります.その後、この方法を使うと、
対象名を「.」の操作符で利用することで実現できます.
Jsコード
法の中で、私達はthisを使って方法の调节者(対象)に対する引用を得ることができて、それによって方法の调节者の各種の属性を獲得します.
Jsコード
Jsコード
もう一つの方法は、一つのfunctionを定義し、二つのパラメータを受信し、一つはpersonで、一つはnameの値です.このように見えます.
changeName.どの方法がいいですか?明らかに、例の中の方法はもっとイメージして、もっと直観的になります.
対象の影
もう一度強調します.方法自体は関数です.ただし、方法の使用はもっと制限されています.後の紙面で、関数といえば、
言った内容は同じ方法に適用されますが、逆は必ずしもそうではありません.
関数のprototype属性
各関数にはプロトタイプの属性が含まれています.この属性はjavascriptオブジェクトに向けた核心的な基礎を構成しています.
var emptyObject1 = {}; //
var emptyObject2 = new Object(); //
var person = {"name":"sdcyst",
"age":18,
"sex":"male"}; // person
alert(person.name); //sdcyst
alert(person["age"]); //18
上記の例からもわかるように、オブジェクトの属性を簡単にオブジェクト名に「.」を付けて属性の名前を付けることができます.「[]」を使って操作してもいいです.この場合は「」の中の属性名に引用符を付けます.オブジェクトの索引はすべて文字列タイプです.javasriptオブジェクトの属性の個数は可変です.オブジェクトを作成した後、いつでも属性を付与できます.
var person = {};
person.name = "sdcyst";
person["age"] = 18;
alert(person.name + "__" + person.age); //sdcyst__18
var _person = {name:"balala","age":23}; // , (name),
// . []
alert(_person["name"] + "__" + person.age); //balala__23
alert(_person[name]); //undefinied
var person = {};
person.name = "sdcyst";
person["age"] = 18;
alert(person.name + "__" + person.age); //sdcyst__18
var _person = {name:"balala","age":23}; // , (name),
// . []
alert(_person["name"] + "__" + person.age); //balala__23
alert(_person[name]); //undefinied
操作子によってオブジェクトの属性を取得するには、属性の名前を知らなければなりません.一般的には、オブジェクト属性を取得する機能がより強くなります.[]にいくつかの表現を入れて属性の値を取ることができます.
例えば循環制御文で使用できますが、「.」操作子にはこのような柔軟性がありません.
var name = {"name1":"NAME1","name2":"NAME2","name3":"NAME3","name4":"NAME4"};
var namestring = "";
for(var props in name) { // name
namestring += name[props];
}
alert(namestring); //NAME1NAME2NAME3NAME4
namestring = "";
for(var i=0; i<4; i++) {
namestring += name["name"+(i+1)];
}
alert(namestring); //NAME1NAME2NAME3NAME4
deleteオペレータは、オブジェクトの中のある属性を削除し、ある属性が存在するかどうかを判断して、「in」オペレータを使用することができます.
var name = {"name1":"NAME1","name2":"NAME2","name3":"NAME3","name4":"NAME4"};
var namestring = "";
for(var props in name) { // name
namestring += name[props];
}
alert(namestring); //NAME1NAME2NAME3NAME4
delete name.name1; // name1
delete name["name3"]; // name3
namestring = "";
for(var props in name) { // name
namestring += name[props];
}
alert(namestring); //NAME2NAME4
alert("name1" in name); //false
alert("name4" in name); //true
なお、オブジェクトの属性には順序がありません.オブジェクトのconstructor属性
各javascriptオブジェクトにはconstructor属性があります.この属性はオブジェクト初期化時のコンストラクタに対応しています.
var date = new Date();
alert(date.constructor); //Date
alert(date.constructor == "Date"); //false
alert(date.constructor == Date); //true
行列オブジェクトは無秩序データの集合であり、配列は秩序データの集合であり、配列中のデータ(要素)は索引(0から開始)によってアクセスされると述べた.
配列中のデータは任意のデータタイプでも良いです.配列自体はまだオブジェクトですが、配列の多くの特性のため、配列とオブジェクトを区別します.
来てそれぞれ対応します.(Throughot this book、object and arrays arted treated as distinct datatypes.
This is a useful and reasonable simplification;you can treat object and arrays as separate types
for most of your JavaScript programming.To fully understand the behavior of object and arrays、
however,you have to know the truth:an array is nothing more than object with a thin layer of extra
functionlity.You can see this with the typeof operator:appied to an array value,it returns
the string“object”.--section 7.5).
配列を作成するには、[]操作子、またはAray()コンストラクタを使ってnew一つを操作できます.
Jsコード
var array1 = []; //
var array2 = new Array(); //
array1 = [1,"s",[3,4],{"name1":"NAME1"}]; //
alert(array1[2][1]); //4
alert(array1[3].name1); //NAME1
alert(array1[8]); //undefined
array2 = [,,]; // , undefined
alert(array2.length); //3
alert(array2[1]); //undefined
var array1 = []; //
var array2 = new Array(); //
array1 = [1,"s",[3,4],{"name1":"NAME1"}]; //
alert(array1[2][1]); //4
alert(array1[3].name1); //NAME1
alert(array1[8]); //undefined
array2 = [,,]; // , undefined
alert(array2.length); //3
alert(array2[1]); //undefined
new Aray()で配列を作成する場合、デフォルトの大きさを指定できます.この値はundefinedです.後で彼らに値を割り当てることができます.javascriptの配列の長さは任意に変えられます.配列の内容も任意に変えられます.この初期化の長さは実際には
配列には拘束力がありません.1つの配列に対しては、その最大長さを超えるインデックスの割り当て値に対しては、配列の長さを変更します.一方で、値なしに対しては与えられません.
のインデックスにundefinedを割り当て、次の例を参照してください.
Jsコード
var array = new Array(10);
alert(array.length); //10
alert(array[4]); //undefined
array[100] = "100th"; // , 10-99 undefined
alert(array.length); //101
alert(array[87]); //undefined
var array = new Array(10);
alert(array.length); //10
alert(array[4]); //undefined
array[100] = "100th"; // , 10-99 undefined
alert(array.length); //101
alert(array[87]); //undefined
deleteオペレータで配列の要素を削除できます.この削除は、配列がその位置にある要素をundefinedとするだけで、配列の長さは変わりません.私たちはすでに配列のlength属性を使っています.length属性は読み書きできる属性です.つまり、配列のlength属性を変えることによって、私たちはできます.
配列の長さを変更します.lengthを配列の長さより小さい値に設定すると、元の配列のインデックスがlength-1より大きい値は削除されます.length
の値が元の配列の長さより大きい場合、それらの間の値はundefinedに設定されます.
Jsコード
var array = new Array("n1","n2","n3","n4","n5"); //
var astring = "";
for(var i=0; iastring += array[i];
}
alert(astring); //n1n2n3n4n5
delete array[3]; //
alert(array.length + "_" + array[3]) //5_undefined
array.length = 3; //
alert(array[3]); //undefined
array.length = 8; //
alert(array[4]); //undefined
var array = new Array("n1","n2","n3","n4","n5"); //
var astring = "";
for(var i=0; iastring += array[i];
}
alert(astring); //n1n2n3n4n5
delete array[3]; //
alert(array.length + "_" + array[3]) //5_undefined
array.length = 3; //
alert(array[3]); //undefined
array.length = 8; //
alert(array[4]); //undefined
配列の他の方法については、join/reverseなど、ここでは一例として取り上げられない.上記の説明により、オブジェクトの属性値は属性の名前(文字列タイプ)で取得され、配列の要素は索で取得されることが分かりました.
参照(整数型0~2*32-1)は値を得ます.配列自体も対象ですので、オブジェクト属性の操作も行列にぴったりです.
Jsコード
var array = new Array("no1","no2");
array["po"] = "props1";
alert(array.length); //2
// ,array[0] array["0"] (? , )
alert(array[0] + "_" + array["1"] + "_" + array.po);//no1_no2_props1
関数javascript関数はみんながたくさん書いたと信じていますので、ここでは簡単に紹介します.
関数を作成:
function f(x) {........}
var f = function(x) {......}
上記の2つの形式はいずれもf()という関数を作成できます.あとでないと匿名関数を作成できます.関数定義時にパラメータを設定できます.関数に渡すパラメータの個数が足りない場合は、一番左から順に対応します.残りはundefinedで値を割り当てます.
のパラメータが関数定義パラメータの個数より多いと、多くのパラメータが無視されます.
Jsコード
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,s2,s3) {
alert(s1+"_"+s2+"_"+s3);
}
myprint(); //undefined_undefined_undefined
myprint("string1","string2"); //string1_string2_undefined
myprint("string1","string2","string3","string4"); //string1_string2_string3
したがって、定義された関数については、すべてのパラメータを転用者に伝えることは期待できません.必要なパラメータは関数にあるはずです.を検出したり、デフォルト値を設定してパラメータと動作したりしてパラメータを取得します.
Jsコード
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
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
関数のアーグメンント属性それぞれの関数の内部には、アーグメンントオブジェクトと非常に類似したオブジェクトを表すアーグメンント識別子があります.
Aray(配列)オブジェクトには、例えばlength属性があり、その値にアクセスするには、インデックスを用いてパラメータ値にアクセスする「[]」操作子がありますが、両者は全く違っています.
ものは、表面に共通点があるだけです.
Jsコード
function myargs() {
alert(arguments.length);
alert(arguments[0]);
}
myargs(); //0 --- undefined
myargs("1",[1,2]); //2 --- 1
function myargs() {
alert(arguments.length);
alert(arguments[0]);
}
myargs(); //0 --- undefined
myargs("1",[1,2]); //2 --- 1 Arguments callee , Arguments . .
Jsコード
function(x) {
if (x <= 1) return 1;
return x * arguments.callee(x-1);
} (section8.2)
function(x) {
if (x <= 1) return 1;
return x * arguments.callee(x-1);
} (section8.2)
Method--方法方法は関数です.各オブジェクトには0つ以上の属性が含まれています.属性は任意のタイプでもいいです.もちろん、オブジェクトも含まれます.関数自体は1つです.
対象としては、関数を一つのオブジェクトに入れることができます.この関数はオブジェクトの一つの方法になります.その後、この方法を使うと、
対象名を「.」の操作符で利用することで実現できます.
Jsコード
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 = {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 ,
メソッドの呼び出しにはオブジェクトのサポートが必要ですが、オブジェクトの属性はどうやって取得しますか?thisthisのキーワードはすでによく知っています.javascriptの方です.法の中で、私達はthisを使って方法の调节者(対象)に対する引用を得ることができて、それによって方法の调节者の各種の属性を獲得します.
Jsコード
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 obj = {"name":"NAME","sex":"female"};
obj.print = function() { //
alert(this.name + "_" + this["sex"]);
};
obj.print(); //NAME_female
obj.sex = "male";
obj.print(); //NAME_male
次はもっと対象に向かう例を示します.Jsコード
var person = {name:"defaultname",
setName:function(s){
this.name = s;
},
"printName":function(){
alert(this.name);
}}
person.printName(); //defaultname
person.setName("newName");
person.printName(); //newName
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属性を変えることができます.ここでは先ほど述べた内容を示すためだけです.もう一つの方法は、一つのfunctionを定義し、二つのパラメータを受信し、一つはpersonで、一つはnameの値です.このように見えます.
changeName.どの方法がいいですか?明らかに、例の中の方法はもっとイメージして、もっと直観的になります.
対象の影
もう一度強調します.方法自体は関数です.ただし、方法の使用はもっと制限されています.後の紙面で、関数といえば、
言った内容は同じ方法に適用されますが、逆は必ずしもそうではありません.
関数のprototype属性
各関数にはプロトタイプの属性が含まれています.この属性はjavascriptオブジェクトに向けた核心的な基礎を構成しています.