JavaScript関数は、4種類の方法で呼び出すことができます。
各メソッドは、どのように異なりthis初期化されます。
thisキーワード
JavaScriptでは、というものthis 、現在のコードを「所有する」ことを目的とします。
値はthis関数で使用される場合、機能を「所有する」ことが目的です。
ことに注意してくださいthis変数ではありません。 それはキーワードです。 あなたは、の値は変更することはできませんthis 。
JavaScript関数を呼び出します
あなたは既に「何かが」それを呼び出すときにJavaScript関数内のコードが実行されることを学びました。
関数が定義されている場合関数のコードは実行されません。 関数が呼び出されたときにそれが実行されます。
一部の人々は、用語「 関数を呼び出す 」の代わりに「 関数を呼び出す」を使用します。
また、「機能を実行する ""機能を起動する "、"関数を呼び」、または言って非常に一般的です。
JavaScript関数が呼び出されずに呼び出すことができますので、このチュートリアルでは、我々は、 呼び出しを使用します。
機能としての機能を呼び出します
例
function myFunction(a, b) {
return a * b;
}
myFunction(10, 2); // myFunction(10, 2) will return 20
»それを自分で試してみてください 上記の関数は、任意のオブジェクトに属していません。 しかし、JavaScriptでデフォルトのグローバルオブジェクトが常にあります。
HTMLではデフォルトのグローバルオブジェクトは、HTMLページ自体であるので、上記の機能は、HTMLページに「属しています」。
ブラウザでページオブジェクトは、ブラウザのウィンドウです。 上記の機能が自動的にウィンドウ関数となります。
myFunction()とwindow.myFunction()同じ機能です。
例
function myFunction(a, b) {
return a * b;
}
window.myFunction(10, 2); // window.myFunction(10, 2) will also return 20
»それを自分で試してみてください これは、JavaScript関数を呼び出すための一般的な方法ではなく、非常に良い習慣です。
グローバル変数、メソッド、または機能が簡単にグローバル・オブジェクト内の名前の競合やバグを作成することができます。
グローバルオブジェクト
関数は所有者オブジェクトなしで呼び出されたとき、の値thisグローバルオブジェクトになります。
Webブラウザではグローバルオブジェクトは、ブラウザのウィンドウです。
この例では、の値としてウィンドウオブジェクトを返しますthis :
例
function myFunction() {
return this;
}
myFunction(); // Will return the window object
»それを自分で試してみてください グローバル関数としての機能を呼び出し、値引き起こしthisグローバルオブジェクトであることを。
変数としてウィンドウオブジェクトを使用すると、簡単にプログラムをクラッシュさせることができます。
メソッドとして関数を呼び出します
JavaScriptでは、あなたは、オブジェクトのメソッドとして関数を定義することができます。
次の例では、オブジェクト(作成myObject二つの特性(と、) firstNameとlastName )、およびメソッド( fullName ):
例
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this.firstName + " " + this.lastName;
}
}
myObject.fullName(); // Will return "John Doe"
»それを自分で試してみてください fullNameメソッドは関数です。 この関数はオブジェクトに属します。 myObject関数の所有者です。
ものthis 、JavaScriptコードを「所有する」ことを目的とします。 この場合の値でthisあるmyObject 。
それをテスト! 変更fullNameの値を返すための方法をthis :
例
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
myObject.fullName(); // Will return [object Object] (the owner object)
»それを自分で試してみてください オブジェクトメソッドとしての機能を呼び出し、値引き起こしthisオブジェクト自体であることを。
Functionコンストラクタで関数を呼び出します
関数呼び出しがで先行している場合はnewキーワード、それは、コンストラクタの呼び出しです。
あなたは新しい関数を作成するように見えますが、JavaScript関数を使用すると、実際に新しいオブジェクトを作成するオブジェクトであるため。
例
// This is a function constructor:
function myFunction(arg1, arg2) {
this.firstName = arg1;
this.lastName = arg2;
}
// This creates a new object
var x = new myFunction("John","Doe");
x.firstName;
// Will return "John"
»それを自分で試してみてください コンストラクタ呼び出しは、新しいオブジェクトを作成します。 新しいオブジェクトは、そのコンストラクタからプロパティとメソッドを継承します。
thisコンストラクタでキーワードが値を持っていません。
値はthis関数が呼び出されたときに作成された新しいオブジェクトになります。
関数法と機能を呼び出します
JavaScriptでは、関数はオブジェクトです。 JavaScriptの関数は、プロパティとメソッドを持っています。
call()と、 apply()事前定義されたJavaScript関数法です。 どちらの方法は、関数を呼び出すために使用することができ、両方の方法は、最初のパラメータとして所有者オブジェクトを持っている必要があります。
例
function myFunction(a, b) {
return a * b;
}
myObject = myFunction.call(myObject, 10, 2); // Will return 20
»それを自分で試してみてください 例
function myFunction(a, b) {
return a * b;
}
myArray = [10, 2];
myObject =
myFunction.apply(myObject, myArray); // Will also return 20
»それを自分で試してみてください どちらの方法は、最初の引数として所有者オブジェクトを取ります。 唯一の違いは、ということですcall()個別に関数の引数をとり、 apply()配列内の関数の引数を取ります。
JavaScriptのstrictモードでは、最初の引数は、の値になりthis引数がオブジェクトでない場合であっても、呼び出される関数の中で。
最初の引数の値がnullまたは未定義の場合は「非厳密」モードでは、それはグローバルオブジェクトに置き換えられます。
call()またはapply()次の値を設定することができthis 、既存のオブジェクトの新しい方法としての機能を呼び出します。