Jsアプリ方法詳細

3451 ワード

Jsアプリ方法詳細
私は最初にjavascriptの関数applyとcallを見た時、とてもぼんやりしていて、見ても分かりませんでした.最近ネットでappyの方法とcallのいくつかの例を見ました.  もし何か間違っているところや言い方がはっきりしないところがあれば、読者に多くの意見を提出してもらいたいです.
主にいくつかの問題を解決したいです.
1.        アプリとコールの違いはどこですか?
2.        どんな場合にアプリを使いますか?どんな場合にコールを使いますか?
3.        他の巧みな使い方
まずインターネットでappyとcallの定義を調べて、この二つの方法の意味と使い方を例で説明します.
         別のオブジェクトをハイジャックできる方法で、別のオブジェクトの属性を継承します.
 このオブジェクトは、Functionクラスのthisオブジェクトargsの代わりになります.これは配列です.パラメータとしてFunctionに伝えます.
         call:appyと同じ意味ですが、パラメータリストが違います.
 Function.call(obj,param 1[,param 2[,paramN]]])Obj:このオブジェクトはFunctionクラスのthisオブジェクトparamsの代わりになります.これはパラメータリストです.
1.        apply例:

	/*      */
	function Person(name,age)
	{
		this.name=name;
		this.age=age;
	}
	/*       */
	functionStudent(name,age,grade)
	{
		Person.apply(this,arguments);
		this.grade=grade;
	}
	//       
	var student=new Student("zhangsan",21,"   ");
	//  
	alert("name:"+student.name+"
"+"age:"+student.age+"
"+"grade:"+student.grade); // name:zhangsan age:21 grade: // name age , , apply .
分析:Person.apply(this,argments);
this:オブジェクトを作成する時に代表されるのはstudentです.
argments:行列です.つまり「zhangsan」、「21」、「一年生」です.
                   つまり、StudentでPersonというカテゴリーの内容を実行し、Personというカテゴリーにthis.nameなどの語句があり、これでstudentオブジェクトに属性を作成します.
2.        コールの例
Studen関数では、appyを以下のように修正できます.
Person.call(this,name,age);
これでいいです
3.        どんな場合にアプリを使いますか?どんな場合にコールを使いますか?
対象パラメータの場合、パラメータの形式が配列の場合、例えば、appy例でパラメータargmentsが伝達されています.このパラメータは配列タイプです.Personを呼び出したときのパラメータのリストは対応一致しています.(age,name)、Studentのパラメータリストは(name,age,grade)であり、これはコールで実現できます.すなわち、パラメータリストの対応する値の位置を直接指定します.
4.        他のいくつかの巧みな使い方
注意深い人が気づいたかもしれませんが、appyメソッドを呼び出した時、最初のパラメータは対象で、二つ目のパラメータは一つの配列です. Personを呼び出した時、彼が必要なのは配列ではありませんでした.しかし、なぜ彼は配列を一つのパラメータに解析できますか?これをプログラムで実現させると、配列の各項目をパラメータのリストに置き換えるために時間がかかるかもしれません.この点の特性を利用して、下記の高効率な方法があります.
 
a)        Math.maxは、行列の中で最大のアイテムを得ることができます.
Math.maxパラメータではMath.max([param 1,param 2]はサポートされていませんので、つまり配列です.
しかし、Math.max(param 1、param 2、param 3...)をサポートしていますので、先ほどのappyの特徴によって、var max=Math.max.apply(null、array)を解決できます.このように簡単に1つの配列の中で最大の項目を得ることができます.
         これは呼び出し時に最初のパラメータをnullにあげました.これは対象がないので、この方法を使って計算してください.戻りの結果を得たらいいです.直接にnullを渡しました.
b)        Math.min  行列の中で一番小さいものが得られます.
同じmaxと同じ思想であるvar min=Math.min.apply(null,array)
c)        Aray.prototype.pushは二つの配列の結合を実現できます.
同じpush方法ではPushの配列を提供していませんが、Push(param 1、param、…paramN)を提供していますので、この配列をappyで組み替えることもできます.
	 vararr1=new Array("1","2","3");

	 vararr2=new Array("4","5","6");

	 Array.prototype.push.apply(arr1,arr2);
arr 1は、push方法を呼び出し、パラメータは、appyによって配列をパラメータリストのセットに換えることができることも理解されよう.
通常はどのような場合に、appyがMath.minなどの特殊な使い方を使うことができますか?
ターゲット関数にはn個のパラメータリストが必要ですが、一つの配列の形式を受け取らずに([param 1],…[,paramN]]]))appyでうまく解決できます.
5.        まとめ:
最初はappyがよく分かりませんでした.最後に何回も見て、コードをたくさん叩いてから、中間の道理が分かりました.だから、何をしても自分で頭を動かしてコードを打てば、この技術は身につきます.   
また、例えば、第四部分の内容を巧みに解決しました.実際に存在している問題を解決しました.これは初心者が考えられる解決策ではないです.プログラミングに対して一定の認識がないと、これは思いつかないです.
 
その中にはほとんどの内容が参考になります.
http://www.cnblogs.com/xiaohongwu/archive/2011/06/15/2081237.html
中間は私が彼のことを詳しく理解しています.
私もjs新入生です.もしブログはどこで書いていますか?問題がありますか?それともこの不備なところではないなら、先輩たちによろしくお願いします.ありがとうございます.