ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript 関数のコンテキストは何ですか?

JavaScript 関数のコンテキストは何ですか?

伊谢尔伦
伊谢尔伦オリジナル
2017-07-25 11:31:222482ブラウズ

関数コンテキスト

Java や C/C++ などの言語では、メソッド (関数) はオブジェクトに付属してのみ存在でき、独立していません。 JavaScript では、関数もオブジェクトであり、他のオブジェクトの一部ではありません。これを理解することは、特に関数型 JavaScript を理解する上で重要です。

関数のコンテキストは変更される可能性があるため、関数内のこれも変更される可能性があります。つまり、関数は 1 つのオブジェクトのメソッドとして使用することも、別のオブジェクトのメソッドとしても同時に使用することもできます。独立した。関数のコンテキストは、Function オブジェクトの call または apply 関数を通じて変更できます。

call と apply
call と apply は、通常、関数のコンテキストを変更するために使用されます。関数内の this ポインターは置き換えられます。パラメーターの呼び出しまたは適用の最初の部分で、「オブジェクトと JSON の JavaScript 入門」の例を見てみましょう:

//定义一个人,名字为jack 
var jack = { 
name : "jack", 
age : 26 
} 
//定义另一个人,名字为abruzzi 
var abruzzi = { 
name : "abruzzi", 
age : 26 
} 

//定义一个全局的函数对象 
function printName(){ 
return this.name; 
} 

//设置printName的上下文为jack, 此时的this为jack 
print(printName.call(jack)); 
//设置printName的上下文为abruzzi,此时的this为abruzzi 
print(printName.call(abruzzi)); 

print(printName.apply(jack)); 
print(printName.apply(abruzzi)); 
只有一个参数的时候call和apply的使用方式是一样的,如果有多个参数: 

setName.apply(jack, ["Jack Sept."]); 
print(printName.apply(jack)); 

setName.call(abruzzi, "John Abruzzi"); 
print(printName.call(abruzzi));

結果は次のようになります:

Jack Sept. 
John Abruzzi 
apply的第二个参数为一个函数需要的参数组成的一个数组,而call则需要跟若干个参数,参数之间以逗号(,)隔开即可。

以上がJavaScript 関数のコンテキストは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。