Jsアプリ方法詳細

5908 ワード

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

  
  
  
  
  1. <script type="text/javascript">// <![CDATA[
  2. /* */
  3. function Person(name,age)
  4. {
  5. this.name=name;
  6. this.age=age;
  7. }
  8. /* */
  9. functionStudent(name,age,grade)
  10. {
  11. Person.apply(this,arguments);
  12. this.grade=grade;
  13. }
  14. //
  15. var student=new Student("qian",21," ");
  16. //
  17. alert("name:"+student.name+"
    "+"age:"+student.age+"
    "+"grade:"+student.grade);
  18. // name:qian age:21 grade:
  19. // name age , , apply .
  20. <script>
分析:Person.apply(this,argments);
this:オブジェクトを作成する時に代表されるのはstudentです.
argments:行列です.つまり「Qian」、「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を呼び出した時に必要なのは一つの配列ではないですが、なぜ彼が私に一つの配列をくれたのですか?配列を一つのパラメータに解析できます.これはappyの巧妙な用途です.一つの配列を一つのパラメータリストに標準的に変換できます.これをプログラムで実現させると、配列の各項目をパラメータのリストに置き換えるために時間がかかるかもしれません.この点の特性を利用して、下記の高効率な方法があります.
 
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で組み替えることもできます.

  
  
  
  
  1. vararr1=new Array("1","2","3");
  2.  
  3. vararr2=new Array("4","5","6");
  4.  
  5. Array.prototype.push.apply(arr1,arr2);
 
arr 1は、push方法を呼び出し、パラメータは、appyによって配列をパラメータリストのセットに換えることができることも理解されよう.
通常はどのような場合に、appyがMath.minなどの特殊な使い方を使うことができますか?
ターゲット関数にはn個のパラメータリストが必要ですが、一つの配列の形式を受け取らずに([param 1],…[,paramN]]]))appyでうまく解決できます.
5.まとめ:
最初はappyがよく分かりませんでした.最後に何回も見て、コードをたくさん叩いてから、中間の道理が分かりました.だから、何をしても自分で頭を動かしてコードを打てば、この技術は身につきます.
また、例えば、第四部分の内容を巧みに解決しました.実際に存在している問題を解決しました.これは初心者が考えられる解決策ではないです.プログラミングに対して一定の認識がないと、これは思いつかないです.