原因
その日、プロトタイプを使用していたので、数行と霧を見たことがわかりました。
propotype.jsコードフラグメント
コードは次のとおりです。
var class = {
create:function(){
return function(){
this.initialize.apply(this、arguments);
}
}
}
//クラスの使用方法は次のとおりです
var a = class.create();
A.プロトタイプ= {
初期化:function(v){
これ。
}
showvalue:function(){
アラート(this.value);
}
}
var a = new a( 'hellod!');
a showvalue();
l初期化?
L Applyメソッドは何をしますか?
l引数変数?
l新しいaの後に初期化メソッドが実行されるのはなぜですか?
答えを見つける:
第二に、JSターゲティングオブジェクト
初期化とは何ですか?
これは単なる変数であり、メソッドを表しており、使用はクラスのコンストラクターです。
特定の関数はJSによってサポートされているため、JSのオブジェクトは何ですか? Javaと同じものと違うものは何ですか?
コードを見てください:
コードは次のとおりです。
次のようにコードコードをコピーします。
var classname = function(v){{
this.value = v;
this.getValue = function(){
this.valueを返します。
}
this.setValue = function(v){
this.value = v;
}
}
では、JSの関数とクラスの違いは何ですか?
実際、それは同じです。
のように
コードは次のとおりです。
var objectName1 = new className( "a");
その中で、ObjectName1はclassNameコンストラクターを実行した後に取得されたオブジェクトであり、これはクラス名関数で新しいものの後に構築されたオブジェクトを指します。したがって、ObjectName1は次の後に1つの属性と2つのメソッドを持ちます。あなたはこれを通してそれらを呼び出すことができます:
コードは次のとおりです。
objectName1.setValue( '' hello '');
alert(objectname1.getValue());
alert(objectname1.value); //ダイアログボックスこんにちは
それで
コードは次のとおりです。
var objectName2 = className( "b");
では、ObjectName2は何を取得しますか?明らかにメソッドの返品値、ここではクラス名は通常の関数としてのみ使用されます(ただし、最初の文字は大文字です)。しかし、前のclassNameには返品値がないため、objectName2は驚かないので、「b」は誰が与えますか?ここにはオブジェクトはありませんが、この方法を簡単に実行するだけなので、この「B」はこのメソッドを呼び出すオブジェクトウィンドウに割り当てられます。
var objectName2 = className( "b");
アラート(window.value); //ダイアログボックスb
したがって、JSのすべての機能は同じですが、使用は異なる場合があります(オブジェクトの構築やプロセスの実行に使用)。
初期化が何をしているのかテーマに戻りましょうか?
コードは次のとおりです。
次のようにコードコードをコピーします。
var class = {
create:function(){
return function(){
this.initialize.apply(this、arguments);
}
}
}
var a = class.create();
このコードは、関数コピーをAに構築することです。この関数は
コードは次のとおりです。
次のようにコードコードをコピーします。
関数 () {
this.initialize.apply(this、arguments);
}
後者の方法は、コンストラクターの作成に使用されます。このコンストラクターを使用してオブジェクトを構築すると、コンストラクターの初期化変数の初期()メソッドがApply()を実行します。このようにして、初期化されたオブジェクト(Applyに連絡する方法)のときに連絡されます。
それで
コードは次のとおりです。
次のようにコードコードをコピーします。
A.Prototype = {
初期化:function(v){
これ。
}
showvalue:function(){
アラート(this.value);
}
}
それはどういう意味ですか?
プロトタイプは「プロトタイプ」を意味します。 Aは関数()で、A。プロトタイプは関数の変数であり、実際にはオブジェクトです。このオブジェクトにはどのような方法がありますか?そのため、オブジェクトは関数によってどのような方法を生成しますか?
var a = new a( 'hellod!');
a showvalue();
したがって、オブジェクトには初期化されたメソッドがあります。 ')、初期化は戻ってApplyメソッドを呼び出しました。これは、初期化を呼び出す方法です。
3。呼び出し()とapply()
Apply()の勉強を開始し、オンラインでいくつかの情報を見つけ、独自の研究を組み合わせてCall()とApply()の機能を理解します。功能基本一样、function()。call(object、{}、{}……)或者function()。apply(object、[……])的功能就是对象オブジェクト调用这里的funciton()、不同之处是コールパラメーターは、2番目からFuncitonに渡されます。 Applyには2つのパラメーターしかなく、2つ目はアレイで、関数に渡されるすべてのパラメーターを保存します。
this.initialize.apply(this、arguments);
それはどういう意味ですか?
ここで最初のこれは、コンストラクターを呼び出した後に生成されたオブジェクトを新しい呼び出しで指します。これは前のAです。次に、この文は、初期化メソッドを呼び出すために、パラメーターは引数オブジェクト(パラメーターの配列の数)です。
では、初期化メソッドのパラメーターをどのように渡すのでしょうか?
第四に、引数オブジェクト
このコードはすべてを説明できます:
コードは次のとおりです。
次のようにコードコードをコピーします。
function test(){
アラート(Typeof引数);
for(var i = 0; i <arguments.length; i ++){
アラート(引数[i]);
}
}
test( "1"、 "2"、 "3");
test( "a"、 "b");
実行後、アラート(typeof引数);次に、順番に1、2、および3を再生します。引数は関数を呼び出す堅実な配列であることを説明してください。
コードは次のとおりです。
次のようにコードコードをコピーします。
var class = {
create:function(){
return function(){
this.initialize.apply(this、arguments);
}
}
}
議論は、createによって返されるコンストラクターのしっかりした配列なので、
var a = new a( 'hellod!');
「helloword!」の時点では、固体パラメーターグループ(1つの文字列があります)は、適用されたメソッドに渡され、初期化関数に渡され、初期化を呼び出したときにパラメーターとして渡されます。