ホームページ > 記事 > ウェブフロントエンド > javascript_javascript スキルでの self と this の使用法の概要
1. 原因
その日はprototype.jsを使ったので、数行読んだだけで混乱してしまいました。 js のオブジェクト指向について詳しくなったので、Baidu や Google で検索してみました。しばらくして、ようやく少し理解できたので、記念に書きます^_^。
prototype.js コード スニペット
コードは次のとおりです。
var Class = {
create: function() {
return function() {
this.initialize.apply(this, argument); }
}
}
// クラスは次のように使用されます。
var A = Class.create();
A.prototype={
Initialize:function(v); 🎜> this . value=v;
}
showValue:function(){
}
}
var a = new A('helloWord !');
a. showValue();// ダイアログ ボックスをポップアップ表示します。
l 初期化とは何ですか?
l apply メソッドは何をしますか?
l 新しい A の後に初期化メソッドが実行されるのはなぜですか?
答えを見つけてください:
2. オブジェクト指向 Js
initialize とは何ですか? それはメソッドを表す単なる変数であり、その目的はクラスのコンストラクターです。
その特定の機能は js のオブジェクト指向の性質によってサポートされています。では、js のオブジェクト指向の性質はどのようなものでしょうか? Javaとの類似点と相違点は何ですか? コードを見てください:
コードは次のとおりです:
このうち、objectName1 は ClassName コンストラクターを実行した後に取得されるオブジェクトで、ClassName 関数内のこれは new 後に構築されるオブジェクトを参照するため、objectName1 は 1 つの属性と 2 つのメソッドを持つことになります。それらは次のように呼び出すことができます:
objectName1.setValue(''hello'');
alert(objectName1.getValue());//ダイアログ helloalert(objectName1.value);/ /ダイアログボックスこんにちは
それでは
var objectName2 = ClassName("b");//オブジェクトを取得します
この方法で objectName2 は何を取得しますか?明らかに、これはメソッドの戻り値です。ここでは ClassName が通常の関数として使用されています (ただし、最初の文字は大文字です)。しかし、先に書き込んだ ClassName には戻り値がないため、objectName2 は不明になります。 では、「b」は誰に割り当てられるのでしょうか。ここではオブジェクトは生成されませんが、このメソッドは単に実行されるだけなので、このメソッドを呼び出すオブジェクト ウィンドウにこの "b" が割り当てられます。その証拠は次のとおりです:
var objectName2 = ClassName("b");/ /get An object
したがって、JS の関数はすべて同じですが、その用途は異なる場合があります (オブジェクトの構築またはプロセスの実行に使用されます)。
本題に戻りましょう。初期化とは何ですか?
コードは次のとおりです:
コードは次のとおりです:
コードは次のとおりです:
3. call() と apply() apply() の勉強を始めましょう。インターネットでいくつかの情報を見つけて、それを自分の研究と組み合わせて call() と apply() を理解しました。 ( ) 関数。関数は基本的に同じです。 function().call(object,{},{}...) または function().apply (object,[...]) の関数は、オブジェクト object が関数を呼び出すことです。ここでの () の違いは、呼び出しパラメータが 2 番目から関数に渡され、「,」で区切って順番にリストできることです。 apply には 2 つのパラメーターしかありません。2 番目のパラメーターは、関数に渡されるすべてのパラメーターを格納する配列です。
this.initialize.apply(this , argument);
とはどういう意味ですか?
ここで最初の this は、new でコンストラクターを呼び出した後に生成されたオブジェクトを参照します。これは前の a であるため、当然、2 番目の this も同じオブジェクトを参照する必要があります。すると、この文は、 this (つまり a) は、initialize メソッドを呼び出し、パラメータは引数オブジェクト (パラメータの配列オブジェクト) であるため、コンストラクタが実行されると、オブジェクト a は、initialize メソッドを実行して初期化することになります。 「初期化」という言葉と一致しているということは、正しいことを意味します。
それでは、初期化メソッドを実行するためのパラメータはどのように渡されるのでしょうか?
4. 引数オブジェクト
このコードですべてを説明できます: