まず、call()に関する公式の説明を見てみましょう。「オブジェクトの1つの方法を呼び出し、現在のオブジェクトを別のオブジェクトに置き換えます。」この説明を読んだ後、あなたはさらに混乱するかもしれません。例を参照してください:
コードコピーは次のとおりです。
var x = "私はグローバル変数です"; //グローバル変数xを定義します
関数a(){//関数クラス構造a
this.x = "私はそれを関数クラス構造a"で宣言しました ";
}
//通常の関数を定義し、現在のポインターに含まれる変数xの値をポップアップします。
関数f(){
アラート(this.x);
}
//返品値は「関数クラス構造aで宣言された」です
f.call(new a());
私の理解では、f.call(new a())は、解析のために関数(実際にはオブジェクト)fを呼び出されたオブジェクト「new a()」にコピーすることです。実際、それは次のコードの解析結果と同じです。
コードコピーは次のとおりです。
関数a(){
this.x = "私はそれを関数クラス構造a"で宣言しました ";
アラート(this.x);
}
a();
この時点で可変Xの範囲が異なるというだけです。はい...少し相続財産があるようですね。上記の例では、fはコンストラクターaの強度オブジェクトによって完全に継承されます。 A.Call(b)が継承モードであることを示すのに十分でない場合は、より継承された使用法を見てみましょう。
コードコピーは次のとおりです。
関数f(){
this.a = "a";
this.b = function(){
アラート( "b");
}
}
function e(){
f.call(this);
}
var c = new e();
アラート(CA); // popt a
cb(); // popt b
この例では、ブラウザの使用方法を知っている友人がいる限り、eがFのプロパティと方法を完全に継承していることがわかります。そうしないと、属性AとBがeで定義されていないため、説明されません。次に、常識によれば、これらの2つのプロパティは、eのインスタンスオブジェクトCには表示されません。