JavaScript 関数は他の言語とは異なり、各関数はオブジェクトとして保持され、実行されます。関数オブジェクトのプロパティを使用すると、関数を変数に割り当てたり、関数をパラメーターとして渡すことが簡単にできます。続行する前に、関数を使用する構文を見てみましょう。
ここに引用があります:
関数 func1(…){…}
var func2=function(…){…};
var func3=関数 func4(…){…};
var func5=新しい関数();
次のようにコードをコピーします。
<script type="text/javascript">
// 1、メソッド呼び出しモード
// 関数がオブジェクトのプロパティとして保存されると、それをオブジェクトのメソッドと呼び、これはオブジェクトにバインドされます。
var myObject={
名前: "myObject"、
値: 0、
インクリメント : function(num){
this.value += typeof(num) === '数値' 数値 : 0;
これを返します。
} 、
toString : function(){
return '[オブジェクト:' + this.name + ' {value:' + this.value + '}]';
}
}
alert(myObject.increment(10).increment(20).toString()); // [オブジェクト:myObject {value:30}]
// 2、関数呼び出しモード
// 関数がオブジェクトの関数ではない場合、関数として呼び出され、グローバル オブジェクトにバインドされます。これは言語設計の間違いです。言語設計が正しい場合、内部関数が呼び出されるとき、これは依然として外部関数の this 変数にバインドされているはずです。
var myObject={
名前: "myObject"、
値: 0、
インクリメント : function(num){
this.value += typeof(num) === '数値' 数値 : 0;
これを返します。
} 、
toString : function(){
return '[オブジェクト:' + this.name + ' {value:' + this.value + '}]';
}、
getInfo: function(){
var self=this;
戻り値 (関数(){
//return this.toString(); // 内部匿名関数の this はグローバル オブジェクト ウィンドウを指し、[オブジェクト ウィンドウ] を出力します。
return self.toString(); // 変数 selft を定義し、それに値 this を割り当てると、内部関数はこの変数を通じてオブジェクトを指す this にアクセスできます。
})();
}
}
alert(myObject.increment(10).increment(20).toString()); // [オブジェクト:myObject {value:30}]
// 3、コンストラクター呼び出しモード
// JavaScript はプロトタイプ継承に基づいた言語です。つまり、オブジェクトは他のオブジェクトからプロパティを直接継承でき、言語はクラスレスです。
// new を先頭に付けて関数が呼び出された場合、関数に接続されたプロトタイプ メンバーを非表示にする新しいオブジェクトが作成され、これがコンストラクターのインスタンスにバインドされます。
関数 MyObject(名前){
this.name = 名前 || 'MyObject';
この値=0;
this.increment = 関数(数値){
this.value += typeof(num) === '数値' 数値 : 0;
};
this.toString = function(){
return '[オブジェクト:' + this.name + ' {value:' + this.value + '}]';
}
this.target = これ;
}
MyObject.prototype.getInfo = function(){
this.toString() を返します。
}
// 同時に MyObject.prototype オブジェクトを作成します。myObject は MyObject.prototype のすべてのプロパティを継承します。これは MyObject のインスタンスにバインドされます。
var myObject = 新しい MyObject();
myObject.increment(10);
アラート(myObject.value); //10
var otherObject = 新しい MyObject();
otherObject.increment(20);
アラート(otherObject.value); //20
alert(myObject.target===myObject); // true
alert(myObject.target.getInfo()); // [オブジェクト:MyObject {値:10}]
// 4, 通話モードを適用する
// JavaScript は関数型オブジェクト指向プログラミング言語であるため、関数にはメソッドを含めることができます。 関数の apply メソッドは、オブジェクトがこのメソッドを持っているかのようになり、this はオブジェクトを指します。
// apply は 2 つのパラメータを受け取ります。1 つ目はバインドされるオブジェクト (this が指すオブジェクト)、2 つ目はパラメータ配列です。
関数 MyObject(名前){
this.name = 名前 || 'MyObject';
この値 = 0;
this.increment = 関数(数値){
this.value += typeof(num) === '数値' 数値 : 0;
};
this.toString=function(){
return '[オブジェクト:'+this.name+' {value:'+this.value+'}]';
}
this.target=this;
}
関数 getInfo(){
this.toString() を返します。
}
var myObj = 新しい MyObject();
alert(getInfo.apply(myObj)); //[Object:MyObject {value:0}]、これは myObj を指します
alert(getInfo.apply(window)); //[オブジェクト Window]、これはウィンドウを指します
// しばらくの間
関数 func(a,b){
アラート(a); // 1
アラート(b); // 2
for(var i=0;i<arguments.length;i++){
アラート(引数[i]); // 1、2、1、2、3
}
変数i=0;
while(i<arguments.length){
アラート(引数[i]); // 1、2、1、2、3
i=i+1;
}
}
関数(1,2,3);
変数 i=0
for (i=0;i<=10;i++) {
document.write("数字は " + i + "<br/>")
}
</script>