JavaScript_javascript のヒントの魔法の call() メソッド

WBOY
リリース: 2016-05-16 16:10:06
オリジナル
1107 人が閲覧しました

まず、call() の公式説明「オブジェクトのメソッドを呼び出し、現在のオブジェクトを別のオブジェクトに置き換える」を見てみましょう。この説明を読むと、さらに混乱するかもしれません。例を参照:

コードをコピー コードは次のとおりです:

var x = "私はグローバル変数です" //グローバル変数 x
を定義します。 function a(){ //関数クラス構造体aを定義
This.x = "関数クラス構造体 a で宣言しました"; }
// 現在のポインタに含まれる変数 x の値をポップアップする通常の関数を定義します
function f(){
アラート (this.x);
}
//戻り値は「関数のクラス構造体aで宣言した」です
f.call(new a());

私の理解では、 f.call(new a()) は、関数 (実際にはオブジェクトでもあります) f を、分析のために呼び出されたオブジェクト "new a()" にコピーします。 実際、分析結果は次のコードと同じです。

コードをコピー コードは次のとおりです:
関数 a(){
this.x = "関数クラス構造体 a で宣言しました";
アラート(this.x); }
a();


変数のスコープだけです上の例では、 f はコンストラクター a のオブジェクトによって完全に継承されています。これだけでは a.call(b) が継承パターンであることを示すのに十分でない場合は、より継承に特化した使用法を見てみましょう。


関数 f(){
This.a ="a"; This.b = function(){
アラート("b");
}
}
関数 e(){
f.call(this); }
var c = new e();
alert(c.a); //
をポップアップします。 c.b(); // ポップアップ b


この例では、ブラウザの使用方法を知っている人なら誰でも、e が f の属性とメソッドを完全に継承していることがわかります。そうでない場合は、属性 a と b が e で定義されていないため、これは常識的に推測できます。 e のインスタンス オブジェクト c では、これら 2 つの属性は表示されません。
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート