Jsアプリの方法について具体的に説明します.

4069 ワード

Jsアプリの方法について具体的に説明します.
私は最初にjavascriptの関数applyとcallを見ましたが、ぼんやりしていて、見ても分かりません.最近ネットでappyの方法とcallに対するいくつかのプレゼンテーションのサンプルを見ました.やっと目に見えました.ここで以下のノートを作ります.  もし何か正しくないところや言い方がわからないところがあったら、読者に多くの意見を提出してもらいたいです.
主にいくつかの問題を解決したいです.
1.        アプリとコールの違いはどこですか?
2.        どんな場合にアプリを使いますか?どんな場合にコールを使いますか?
3.        他の巧妙な使い方(一般的にはどのような場合にappyが使えますか?)
まずインターネットでappyとcallの定義について調べて、この二つの方法の意味と使い方を説明します.
         別のオブジェクトをハイジャックできる方法で、別のオブジェクトの属性を継承します.
 このオブジェクトは、Functionクラスのthisオブジェクトargsに置き換えられます.これは配列で、パラメータとしてFunctionに伝えられます.
         call:appyと同じ意味ですが、パラメータリストだけが違います.
 Function.call(obj,param 1[,param N]]]obj:このオブジェクトは、Functionクラスのthisオブジェクトparamsに代わるものです.これはパラメータリストです.
1.        applyプレゼンテーションの例:
<script type="text/javascript">
	/*      */
	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 . </script>
分析:Person.apply(this,argments);
this:オブジェクトを作成する時に代表されるのはstudentです.
argments:行列です.つまり「zhangsan」、「21」、「一年生」です.
                   つまり、StudentでPersonというカテゴリーの内容を実行していくと、Personというカテゴリーにthis.nameなどの語句が存在し、studentオブジェクトに属性を作成します.
 
2.        コールのデモサンプル
Studeen関数では、appyを以下のように変更できます.
Person.call(this,name,age);
これでいいです
3.        どんな場合にアプリを使いますか?どんな場合にコールを使いますか?
オブジェクトパラメータを与える場合、パラメータの形式が配列であると仮定した場合、例えば、applyデモンストレーションの例ではパラメータargmentsが渡されています.このパラメータは配列タイプです.また、Personを呼び出したときのパラメータのリストは対応して一致します.(age,name)、Studentのパラメータリストは(name,age,grade)であり、これにより、コールで実現できます.すなわち、直接にパラメータリストの対応する値の位置を指定します.
4.        他のいくつかの巧妙な使い方
注意深い人が気づいているかもしれません.私がアプリを呼び出す時、最初のパラメータは対象です.二つ目のパラメータは一つのセットです.Personを呼び出す時に必要なのは一つの配列ではないですが、なぜ彼が私に一つの配列をくれたのですか?配列を一つのパラメータに解析できます.これはappyの巧みな用途です.一つの配列を一つのパラメータリストに標準的に変換することができます.この仮説は、配列の各項目をパラメータのリストに置き換えるためのプログラムを使って実現させます.これは、applyの特性を利用して、少し時間がかかるかもしれません.だから、次の高効率な方法があります.
 
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は2つの配列の結合を実現することができます.
同じ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などの特別な使い方ができますか?
ターゲット関数にはn個のパラメータリストだけが必要で、一つの配列の形式を受け取らずに([param 1],…[,paramN]]]))appyで問題をうまく解決できます.
5.        まとめ:
最初はappyについてよく分かりませんでしたが、最後に何回も見て、自分でコードをたくさん叩いて、やっと中間の道理が分かりました.だから、どんなことをしても、自分で頭を動かして、手書きの手続きをするだけで、技術が身につきます.   
また、例えば、第四部分の内容を巧みに把握し、実際に存在する問題を解決しました.これは確かに勉強を始めたばかりの人が思いつく解決方法ではないです.プログラミングに対して一定の認識がないと、これは思いつかないです.やはり一言で、多くの蓄積、多くの勉強をして、自分の能力とプログラミング思想に対する理解能力を高めることが一番重要です.
 
中にはほとんどの内容が参考になります.
http://www.cnblogs.com/xiaohongwu/archive/2011/06/15/2081237.html
その中で、私はそのいくつかの具体的な理解があります.
私もjs新入生です.もしブログはどこで書いたのかが問題があるのか、それともこの不完全なところではないとしたら、先輩たちに教えてほしいです.ありがとうございます.