結果としては、長い間読んだ後、慎重に検討した結果、全体的な理解は得られましたが、何も理解していないようです...
この記事は<>第 7 章、第 8 章、および第 9 章でも、
JavaScript のオブジェクト指向技術を元の本の構造 (オブジェクト/配列->関数-) に従って説明できるよう最善を尽くします。 ->class/constructor/Prototype) 一部分からない部分は参考に原文の英語文を添付します
特に説明がない場合は全て英語の文章です(プログラムを除く)。本文中)は
から引用しています。 --------- --------------------
オブジェクトと配列
オブジェクトとは何ですか?ユニット内では、オブジェクトが形成されます。JavaScript の
のオブジェクトは、「キーと値」のペアのコレクションであることがわかります (オブジェクトは、名前付きの値のコレクションです。これらの名前付きの値は、通常、
はオブジェクトのプロパティとして参照されます。 -- セクション 3.5)。
"Name" は文字列型のみであり、他の型は使用できません。プロパティの型は
any (数値) です。 /string/other オブジェクト。)。 new Object() を使用して空のオブジェクトを作成することも、単に "{}" を使用して
の空のオブジェクトを作成することもできます。 🎜>
each JavaScript オブジェクトにはコンストラクター属性があります。この属性は、オブジェクトが初期化されるときのコンストラクターに対応します (関数もオブジェクトです)。 >コードをコピーします
delete 演算子を使用して配列の要素を削除できます。この削除では、その位置にある配列の要素が未定義に設定されるだけであり、配列の長さは変更されないことに注意してください。配列の長さ属性がすでに使用されている場合、長さ属性は読み取り/書き込み属性です。つまり、長さが に設定されている場合、配列の長さ属性を変更することで配列の長さを任意に変更できます。配列の長さより小さい値の場合、元の配列の長さ-1 より大きいインデックスを持つ値は削除されます。長さ
の値が元の配列の長さより大きい場合、
Js コード
コピーコード
コードは次のとおりです。 var array = new Array("n1","n2","n3"," n4","n5"); //5 つの要素の配列
var astring = "" ;
for(var i=0; i
astring = array[i];
alert(astring);
delete array[3]; //配列要素の値を削除します
alert(array.length "_" array[3]) //5_unknown
array.length = 3; /配列の長さを減らします
alray(array[3]); //未定義
array.length = 8; / /配列の長さを拡張します
alray[4]); /unknown
var array = new Array("n1","n2","n3","n4","n5"); / /5 つの要素の配列
var astring = ""; for(var i=0; iastring = array[i]>}
alert(astring) //n1n2n3n4n5
削除array[3]; //配列要素の値を削除します
alert(array.length "_" array[3]) //5_unknown
array.length = 3;配列
alert(array[3]); //未定義
array.length = 8; //配列の長さを拡張します
alert (array[4]); >
join/reverse などのその他の配列のメソッドについては、ここでは 1 つずつ例を示しません。
上記の説明を通じて、 の属性値が得られることはすでにわかっています。オブジェクトは属性の名前 (文字列型) を通じて取得され、配列の要素はインデックス
(整数型 0~~2**32-1) を通じて取得されます。配列自体もオブジェクトです。 、したがって、オブジェクトのプロパティの操作は配列に完全に適しています
コードをコピーします
コードは次のとおりです。次のように:
関数
誰もがたくさんの JavaScript 関数を書いたと思うので、ここでは単純に説明します。
関数の作成:
コードをコピーします。
コードは次のとおりです:
function f( x) {....}
コードをコピー
コードは次のとおりです。
function myprint(s1,s2,s3) {
myprint("string1","string2"); //string1_string2_unknown
myprint("string1","string2","string3", "string4"); //string1_string2_string3
したがって、定義された関数の場合、呼び出し元がすべてのパラメーターを渡すことは期待できません。使用する必要があるパラメーターは関数本体でチェックする必要があります。 🎜> (! 演算子を使用)、またはデフォルトに設定します。その後、値をパラメータで or (||) 演算してパラメータを取得します。 >
コードをコピー
コードは次のとおりです:
function myprint(s1,person) {
vardefaultperson = { //デフォルトの person オブジェクト
"name":"name1",
"age":18,
" sex":"女性"
};
if(!s1) { //s1 を空にすることはできません
alert("s1 は入力する必要があります!");
return false;
}
person = person || //person オブジェクトパラメータ
alert(s1 "_" person.name ":" person.age ":" person.sex);
myprint(); //s1 を入力する必要があります!
myprint("s1"); //s1_name1:18:女性
myprint("s1",{"name":"sdcyst) ", "年齢":23,"性別":"男性"}); //s1_sdcyst:23:男性
function myprint(s1,person) {
vardefaultperson = { //デフォルトの人物オブジェクト
" name":"name1",
"age":18,
"性別":"女性"
};
if(!s1) { //s1 は許可されませんempty
alert("s1 を入力する必要があります!");
return false;
}
person = person || 人物オブジェクトパラメータ
alert(s1 "_") person.name " :" person.age ":" person.sex);
myprint(); //s1 を入力する必要があります。 /s1_name1:18 :女性
myprint("s1",{"名前":"sdcyst","年齢":23,"性別":"男性"}); //s1_sdcyst:23:男性
関数の argument 属性
各関数本体内には、Arguments オブジェクトを表す引数識別子があります。Arguments オブジェクトは、Array (配列) オブジェクトと非常によく似ています。例 length 属性にその値にアクセスするには、「[]」演算子を使用してインデックスを使用してパラメータ値にアクセスします。ただし、この 2 つはまったく異なる
ものであり、表面上の類似点があるだけです (たとえば、 、Arguments オブジェクト属性の長さを変更しても、その長さは変わりません)。コードは次のとおりです。
function myargs() {
alert(arguments.length)
alert(arguments[0]); ); //0 --- 未定義
myargs("1",[1,2]); //2 --- 1
関数 myargs() {
Js コード
コードをコピー
コードは次のとおりです:
function(x) {
if (x <= 1) 1 を返す;
return x * argument.callee(x -1);
} (セクション 8.2)
function(x) {
if (x return x * argument.callee(x-1);
} (セクション 8.2)
を実行できます。 >
コードをコピー
コードは次のとおりです:
var obj = {f0:function(){alert("f0") ;}}; // オブジェクトにはメソッドが含まれています
function f1() {alert("f1" );}
obj.f1 = f1; // オブジェクトにメソッドを追加します
obj.f0(); //f0 f0 は obj
obj.f1() のメソッドです。 //f1 f1 は obj
f1() のメソッドです。直接呼び出すことができます
f0(); //f0 は obj のメソッドにすぎず、オブジェクトを通じてのみ呼び出すことができます
var obj = {f0:function(){alert("f0");}}; // オブジェクトにはメソッドが含まれています
では、 this を使用してメソッド呼び出し元 (オブジェクト) への参照を取得し、それによってメソッド呼び出し元
のさまざまな属性を取得できます。
Js コード
コードをコピー
コードは次のとおりです:
var obj = {"name":"名前","性別":"女性"};
obj.print = function() { //オブジェクトにメソッドを追加します
alert (この .name "_" this["性別"]);
}
obj.print(); //NAME_女性
obj.sex = "男性"; ); //NAME_男
var obj = {"name":"NAME","性別":"女性"};
obj.print = function() { //オブジェクト
alert にメソッドを追加します(この .name "_" this["性別"]);
}
obj.print(); //NAME_女性
obj.sex = "男性"; ); //NAME_male
よりオブジェクト指向の例を見てみましょう。
コードをコピーします。 >
},
"printName":function(){
alert(this.name);
}}
person.printName(); ("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 属性を直接変更できます。
person 属性を変更するもう 1 つの方法は、次のような 2 つのパラメーター (1 つは person、もう 1 つは name の値) を受け取る関数を定義することです。 changeName (person, "newName") どちらのメソッドが優れているでしょうか? 明らかに、この例のメソッドの方がより鮮明で直感的であり、
を少し重視しているように見えます。もう一度説明しますが、メソッド自体は関数ですが、次のページで関数が言及されている場合、メソッドの使用はより制限されています。
で言及されている内容はメソッドにも適用されますが、逆には適用されません。
関数のプロトタイプ属性
各関数には、オブジェクト指向 JavaScript の基礎となるプロトタイプ (プロトタイプ) 属性が含まれています。