ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascript スキルでの self と this の使用法の概要

javascript_javascript スキルでの self と this の使用法の概要

WBOY
WBOYオリジナル
2016-05-16 17:01:151150ブラウズ

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との類似点と相違点は何ですか?
コードを見てください:

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


コードをコピーしますコードは次のとおりです: var ClassName = function(v ){
this.value=v;
this.getValue=function(){
return this.value;
}
this.setValue=function(v ){
this .value=v;
}
}


では、JS の関数とクラスの違いは何でしょうか?
実際には、ClassName は関数であり、new の後に出現する場合は、オブジェクトを構築するためのコンストラクターとして使用されます。
として

コードは次のとおりです:
var objectName1 = new ClassName("a");//オブジェクトを取得します

このうち、objectName1 は ClassName コンストラクターを実行した後に取得されるオブジェクトで、ClassName 関数内のこれは new 後に構築されるオブジェクトを参照するため、objectName1 は 1 つの属性と 2 つのメソッドを持つことになります。それらは次のように呼び出すことができます:

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

objectName1.setValue(''hello'');

alert(objectName1.getValue());//ダイアログ hello

alert(objectName1.value);/ /ダイアログボックスこんにちは

それでは

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

var objectName2 = ClassName("b");//オブジェクトを取得します

この方法で objectName2 は何を取得しますか?明らかに、これはメソッドの戻り値です。ここでは ClassName が通常の関数として使用されています (ただし、最初の文字は大文字です)。しかし、先に書き込んだ ClassName には戻り値がないため、objectName2 は不明になります。 では、「b」は誰に割り当てられるのでしょうか。ここではオブジェクトは生成されませんが、このメソッドは単に実行されるだけなので、このメソッドを呼び出すオブジェクト ウィンドウにこの "b" が割り当てられます。その証拠は次のとおりです:
var objectName2 = ClassName("b");/ /get An object

alert(window.value); //Dialog b

したがって、JS の関数はすべて同じですが、その用途は異なる場合があります (オブジェクトの構築またはプロセスの実行に使用されます)。
本題に戻りましょう。初期化とは何ですか?

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


コードをコピーします コードは次のとおりです: var Class = {
create: function() {
();


このコードは関数を構築し、それを A にコピーします。この関数は
です。
コードは次のとおりです:



コードをコピーします

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

function() { this.initialize.apply(this , 引数);
そして、この後者のメソッドはコンストラクターとして使用されます。このコンストラクターを使用してオブジェクトを構築すると、構築されたオブジェクトの初期化変数によって apply() メソッドが実行されます。 apply() の目的については後で説明し、初期化について引き続き説明します。このように、オブジェクトを初期化する際にinitializeに問い合わせることになります(問い合わせ方法はapplyにより異なります)。
それでは

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

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

A.prototype={
初期化:function(v){
this .value=v;
}
showValue:function(){
alter(this.value); }
}

とはどういう意味ですか?
プロトタイプとは「試作品」という意味です。 A は function() であり、A です。プロトタイプは関数内の変数であり、実際にはオブジェクトです。このオブジェクトがどのようなメソッドを持っていても、関数によって生成されたオブジェクトにはそれらのメソッドが含まれるため、
var a = new A('helloWord!');
a. showValue();// ダイアログ ボックスをポップアップします。こんにちはワード!
そのため、オブジェクト a には初期化メソッドもあります。それだけでなく、A によって構築されたすべてのオブジェクトには初期化メソッドがあります。前述したように、コンストラクターは構築中に呼び出され、initialize はコンストラクター内で呼び出されます。 apply メソッドなので、initialize は new A('helloWord!') のときに apply メソッドを呼び出します。これは初期化メソッドを呼び出すことです。

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. 引数オブジェクト
このコードですべてを説明できます:

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


コードをコピーしますコードは次のとおりです:
関数 test(){
アラート(引数の種類);
for(var i=0; i アラート(引数[i]); >}
test ("1","2","3");
test("a","b");


実行後アラート(引数の種類) ; オブジェクトを表示し、説明引数はオブジェクトです。その後、1、2、3 が順番に再生されます。説明引数は、呼び出し関数の実際のパラメータ グループです。
コードは次のとおりです:


コードをコピーします コードは次のとおりです: var Class = {
create: function() {
arguments は、create によって返されるコンストラクターの実際のパラメーター グループです。
var a = new A('helloWord!');
' helloWord!' は実際のパラメータ グループ (文字列は 1 つだけですが) であり、 apply メソッドに渡され、initialize の呼び出し時に初期化関数のパラメータとして渡されます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。