ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptでこのキーワードを変更する方法例を詳しく解説

JavaScriptでこのキーワードを変更する方法例を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-20 14:48:491253ブラウズ

これは JavaScript のキーワードであり、関数がさまざまな状況で使用されると、この値は変化します。ただし、常に原則があり、これは関数を呼び出すオブジェクトを参照します。

これは通常、現在の呼び出し先を指しますが、他の方法でも変更できます:

1. 呼び出しが継承として使用される場合:

function Parent(age){
this.name=['mike','jack','smith'];
this.age=age;
}
function Child(age){
Parent.call(this,age);//把this指向Parent,同时还可以传递参数
}
var test=new Child(21);
console.log(test.age);//21
console.log(test.name);
test.name.push('bill');
console.log(test.name);//mike,jack,smith,bill

2. call と apply はどちらもこの点を に変更できますが、apply の 2 番目のパラメーターはハッシュ分布であり、call は配列にすることができます

console.log(Math.max.apply(null,[1,2,3,4]));//4

apply() メソッドは 2 つのパラメーターを受け取ります。1 つはそのスコープ内で関数を実行するためのものです。 、もう 1 つはパラメータ配列です。このうち、2 番目のパラメーターは Array のインスタンスまたは引数オブジェクトにすることができます。 call() メソッドは apply() メソッドと同じ効果を持ちますが、パラメータの受け取り方法が異なるだけです。 call()

メソッドの場合、最初のパラメーターは変更されない this の値です。変更されるのは、残りのパラメーターが関数に直接渡されることです。つまり、call() メソッドを使用する場合、関数に渡されるパラメータを 1 つずつ列挙する必要があります。

3.ES5 は、関数のインスタンスを作成するメソッド :bind() も定義しており、その this 値は、bind() 関数に渡される値にバインドされます。たとえば、

window.color='red';
var o={color:'blue'};

function sayColor(){
console.log(this.color);
}
var objectSaycolor=sayColor.bind(o);
//var objectSaycolor=sayColor.bind();
objectSaycolor();//blue

ここでsayColor()はbind()を呼び出し、オブジェクトoを渡してobjectSayColor()関数を作成します。 objectSayColor() 関数の this 値は o に等しいため、この関数がグローバル スコープで呼び出された場合でも、青が表示されます。

callメソッド:

構文: call(thisObj, Object)


定義: オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。

説明:

call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。


thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。

applyメソッド:

構文: apply(thisObj, [argArray])

定義: 特定のオブジェクトのメソッドを適用し、現在のオブジェクトを別のオブジェクトに置き換えます。

注:

argArray が有効な配列でない場合、または引数オブジェクトではない場合、TypeError が発生します。

argArray も thisObj も指定されていない場合は、Global オブジェクトが thisObj として使用され、パラメーターを渡すことはできません。

コード例:

function Animal(name) {
   this.name = name;
   this.showName = function() {
     console.log(this.name);
   };
 }
 function Cat(name) {
   Animal.call(this, name);
 }
 Cat.prototype = new Animal();
 function Dog(name) {
   Animal.apply(this, name);
 }
 Dog.prototype = new Animal();
 var cat = new Cat("Black Cat"); //call必须是object
 var dog = new Dog(["Black Dog"]); //apply必须是array
 cat.showName();
 dog.showName();
 console.log(cat instanceof Animal);
 console.log(dog instanceof Animal);

以上がJavaScriptでこのキーワードを変更する方法例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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