JAvascriptの概要(二)
2177 ワード
JAvascriptオブジェクト向け
javascriptもオブジェクト向けにできるなんて、すごいですね.Javascriptでオブジェクトを作成するには
ここでfunction foo()はクラスの役割を果たす.nameは関数を構築する意味がありますが、ここでthisはpythonのselfに似ています.オブジェクトの作成はnewで宣言され、javaなどのプログラミング言語と似ています.
もちろんクラスfooの他のメソッドもfoo{}に書くことができますが、javascriptは他のオブジェクト向け言語のようにオブジェクトがクラスを参照する方法ではなく、オブジェクト生成時にオブジェクトの記憶空間にも対応するメソッドが格納されています.これにより、複数のオブジェクトに同じものが格納され、メモリが占有されます.prototypeを使用してこの問題を解決することができます.具体的な例は以下の通りです.
prototype(プロトタイプ)でfooにメソッドを追加し、オブジェクト呼び出し時にfooのプロトタイプからメソッドを探します.このようにメソッドを追加することもできます.
JAvascript構文解析
関数が実行された瞬間にアクティブオブジェクト(Active Object)が生成され、AOの最初のステップと略称される:解析パラメータ:関数受信形式パラメータ、AOに追加された属性.このとき値はundefineであり、実パラメータを受信し、AOに追加された属性であり、前のundefineの第2のステップを上書きする:解析変数宣言:前の解析パラメータにAOがまだこの属性を持っていない場合、AO属性をundefineとして追加し、AOの上にすでに属性がある場合は、3番目のステップを変更しません.関数を分析する宣言:関数名と前の属性が同じ名前の場合、属性を上書きします.すなわち、関数名の優先度が最も高いです.事例関数
構文解析:
第一歩、分析関数パラメータ:形式パラメータ:AO.age=undefined実参:AO.age=18第2ステップ,解析局所変数:3行目コードにvar ageがあるが,このとき第1ステップにAOがある.age=18なので、何の変更もしないAO.age=18第3ステップ、解析関数宣言:5行目のコードに関数ageがある場合、function age(){}をAOに支払う.age,すなわちAO.age=function age(){}すなわちfunctionの優先度が最も高い
2行目のコード実行時に取得したageは文法解析後のAOである.age,結果は:function age(){};
3行目のコード:25はageに割り当てられ、このときage=25;
4行目のコード実行時ageは25に割り当てられ、結果は25である.
5,6行目のコードは関数式なので、何もしません.
7行目のコード実行時ageは依然として25であり、結果も25である.
javascriptもオブジェクト向けにできるなんて、すごいですね.Javascriptでオブジェクトを作成するには
function foo(n){
this.name =n;
}
var obj=new foo("ww");
console.log(obj.name);
// ww
ここでfunction foo()はクラスの役割を果たす.nameは関数を構築する意味がありますが、ここでthisはpythonのselfに似ています.オブジェクトの作成はnewで宣言され、javaなどのプログラミング言語と似ています.
もちろんクラスfooの他のメソッドもfoo{}に書くことができますが、javascriptは他のオブジェクト向け言語のようにオブジェクトがクラスを参照する方法ではなく、オブジェクト生成時にオブジェクトの記憶空間にも対応するメソッドが格納されています.これにより、複数のオブジェクトに同じものが格納され、メモリが占有されます.prototypeを使用してこの問題を解決することができます.具体的な例は以下の通りです.
function foo(n){
this.name =n;
}
var obj=new foo("ww");
console.log(obj.name);
foo.prototype.sayName=function(){
console.log(this.name);
}
prototype(プロトタイプ)でfooにメソッドを追加し、オブジェクト呼び出し時にfooのプロトタイプからメソッドを探します.このようにメソッドを追加することもできます.
foo.prototype={
"sayName":function(){
console.log(this.name);
}
}
JAvascript構文解析
関数が実行された瞬間にアクティブオブジェクト(Active Object)が生成され、AOの最初のステップと略称される:解析パラメータ:関数受信形式パラメータ、AOに追加された属性.このとき値はundefineであり、実パラメータを受信し、AOに追加された属性であり、前のundefineの第2のステップを上書きする:解析変数宣言:前の解析パラメータにAOがまだこの属性を持っていない場合、AO属性をundefineとして追加し、AOの上にすでに属性がある場合は、3番目のステップを変更しません.関数を分析する宣言:関数名と前の属性が同じ名前の場合、属性を上書きします.すなわち、関数名の優先度が最も高いです.事例関数
function func(age) {
console.log(age);
var age = 25;
console.log(age);
function age() {
}
console.log(age);
}
func(18);
ƒ age() {
}
25
25
構文解析:
第一歩、分析関数パラメータ:形式パラメータ:AO.age=undefined実参:AO.age=18第2ステップ,解析局所変数:3行目コードにvar ageがあるが,このとき第1ステップにAOがある.age=18なので、何の変更もしないAO.age=18第3ステップ、解析関数宣言:5行目のコードに関数ageがある場合、function age(){}をAOに支払う.age,すなわちAO.age=function age(){}すなわちfunctionの優先度が最も高い
2行目のコード実行時に取得したageは文法解析後のAOである.age,結果は:function age(){};
3行目のコード:25はageに割り当てられ、このときage=25;
4行目のコード実行時ageは25に割り当てられ、結果は25である.
5,6行目のコードは関数式なので、何もしません.
7行目のコード実行時ageは依然として25であり、結果も25である.
function func(age) {
var age;
console.log(age);
var age = 25;
console.log(age);
function age() {
}
console.log(age);
}
func(18);