javascriptオブジェクトの不完全な探索記録02:クレイジーコール!誰に電話しますか?何をコールしますか?

2943 ワード

暖かいヒント:著者の登山記録は、あなたなどの大神には全く価値がありません.私の人生の無駄な暖かさを思い出さないでください.コールは元々私達のアイドルオタク文化の専門用語です.ライブを見ている時にファンがステージの下で愛豆公演のリズムに合わせてスローガンを叫んでいます.例を挙げて、「超絶可愛い~TJY!!!」
javascriptには2つのよく挙げられる不思議な関数があります.伝説のcall()apply()はまずドキュメントの中の定義JavaScript標準ライブラリ-Function.prototype.call()JavaScript標準ライブラリ-Function.prototype.appyを見てください.
call()メソッドは、指定されたthis値と、それぞれ提供されるパラメータ(パラメータのリスト)を有する関数を呼び出します.
この方法の役割はappy()法と類似していますが、一つの違いはcall()法が受け入れるのはいくつかのパラメータのリストであり、appy()法が受け入れるのは複数のパラメータを含む配列です.
上の段から、私は2時までgetしました.1.これは人の話ではありません.2.call()がよく分かっているということは、apply()が分かりました.それは一つの攻略です.
コールは誰ですか?誰に電話しますか
構文
fun.call(thisArg,arg 1,arg 2,…)
パラメータthisArg:fun関数運転時に指定されたthis値です.指定されたthis値は必ずしもこの関数が実行された時の本当のthis値ではないので、この関数が非厳密モードであれば、nullとundefinedとして指定されたthis値は自動的にグローバルオブジェクト(ブラウザではwindowオブジェクト)に向けられ、元の開始値(数字、文字列、ブール値)のthisは元の自動パッケージオブジェクトを指します.arg 1,arg 2,…:指定されたパラメータリストです.
戻り値は、あなたが呼び出した方法の戻り値です.この方法に戻り値がない場合は、undefinedに戻ります.
文書の説明を参考にして、call()の役割は実際に関数を変えて実行するthisで、コールの語面の意味と合わせて理解できます.thisArgを呼び出してfunthisとして、直接的にわかるように、王さんは洗濯服を持っているという方法があります.張さんに電話して服を洗濯させます.洗濯はできませんが、この電話で彼は洗いに行きます.
これでよく分かります.call()の二つのパラメータ、一つ目は関数/洗濯を行うthis(対象)/枚目で、二つ目からはこの関数のパラメータです.
更に簡単に理解すると、call()の実行は、fun自体を実行しているにすぎず、この関数を実行する対象を変更したにすぎない.
どうやってコールしますかcall()の定義が分かりました.また、あの憂鬱な問題が頭に浮かんできました.
var name = "The Window";
var object = {
  name : "My Object",
  getNameFunc : function(){
    return function(){
      return this.name;
    };
  }
};
alert(object.getNameFunc()());//The Window
詳細は私のもう一つの文章の中でjavascript対象が不完全で記録を探しています.which?-lskratの中でこの問題があまりにも無頓着な原因は、この中のthisが結局whichであり、「The Window」が現れた原因は結局object.getNameFunc()を実行するのがWindowの対象であるからです.
ですから、期待される結果を得るためには、call()を呼んで、自分で実行してもいいですか?
alert(object.getNameFunc().call(object));//My Object
本当に効果的です.call()にコールしたいです.このような著しい治療効果はどこに使えますか?
何をコールしますか
私がまとめてみます.
1.愚かさを防止し、call()このソースを指定し、上記を見てから分かりました.this目標に対して、目标がぼんやりしている学生たちはthisを使って直接call()を指定して、実行させてもいいです.例:上記を参照してください
2.継承を実現し、対象言語に対する基礎的な特性として、javascriptには多くの実施形態があり、そのうちの一つはthisを用いることである.
function Food(name, price) {
    this.name = name,
    this.price = price,
    this.getPrice = function() {
        console.log("   " + this.name + "  " + this.price + "  !         ")
    }
}

function RouJiaMo() {
    Food.call(this, "   ", 5);
}

var rouJiaMo = new RouJiaMo()
rouJiaMo.getPrice();//        5  !         
call()を作成した場合、rouJiaMoFood()thisに変更した.これはRouJiaMorouJiaMoと同じ内部変数を持つだけでなく、その内部関数を呼び出して、継承を形成することができる.