注: このブログは、Node.js (1) を攻撃するための基本を学習する際の学習ノートです。Scott 氏のコースに感謝します。
1. この文脈の理解
これは通常、現在の関数の所有者を指します。
3つの使い方をご紹介
1. オブジェクト内の関数の this
var pet = {
words: 'lalala',
speak: function() {
console.log(this.words)
console.log(this === pet)
}
}
pet.speak()
ペットはオブジェクトです。上記のコードを実行し、以下を返します。
> lalala
> true
ここで、これは変数 pet を指しています。
2.これはグローバル関数で
function pet(words){
this.words = words
console.log(this.words)
console.log(this)
console.log(this === global)
}
pet('lalala')
実行後に戻る:
> lalala
//このパイルはトップレベルのグローバル変数のすべてのパラメータです
> true
ここでは、pet() がグローバル変数にあるため、これはグローバル変数 (pet() 関数の所有者) を指します。
3. 関数内の関数の this は、関数を呼び出すオブジェクトを指します。
function Pet(words) {
this.words = words
this.speak = function(){
console.log(this.words)
console.log(this)
}
}
var cat = new Pet('Miao') //new了一个实例对象
cat.speak()
戻る:
> Miao
> {words: 'Maio', speak:[Function]}
このうち {words: 'Maio', speak:[Function]} は cat のインスタンスオブジェクトです。
ここで、これは cat のインスタンス オブジェクトを指します
2. を呼び出して、関数実行のコンテキストを変更します
var pet ={
words:'...',
speak:function(say){
console.log(say+' '+this.words)
}
}
pet.speak('Speak')
//retuen Speak ...
var dog = {
words:'Wang'
}
//调用Pet的speak函数
pet.speak.call(dog,'Speak')
戻る:
> Speak Wang
呼び出し機能を使用して、これをペットから犬に変更します。メソッドを呼び出し、メソッドのコンテキストとして別のオブジェクトを指定する場合に使用できます。
さらに、コンテキストを変更すると、継承を使用するのにも便利です。
3. 継承は呼び出しで実現、呼び出しと適用の両方が使用可能
function Pet(words){
this.words = words
this.speak = function(){
console.log(this.words)
}
}
function Dog(words){
Pet.call(this, words)
//通过call把指向Pet的指针指向Dog,使Dog有Pet的函数方法
//Pet.apply(this, arguments) //aruguments传的是类数组
}
var dog = new Dog('Wang')
dog.speak()
戻る:
> Wang
呼び出しで Pet から Dog へのポインターをポイントし、Dog が Pet の関数メソッドを持つようにします。