Javascriptのfunction.apply()の周りを頭で囲んでいます。オブジェクトobj
上にマッピングthis
の関数の内部使用に、与えられた引数args
と機能f
を実行するために f.apply(obj,args)
jQueryセットに設定したときにfunction.applyの "this" argを理解しています
:あなたはこのようにそれを使用しています。
var o = {
state : 0,
plus : function(){
this.state += 1;
}
}
//o is an object with a state-tracking var and a function that will operate on it
o.state
// 0
o.plus()
o.state
// 1
newO = {state:3}
// newO is similar to the original object, but doesn't have that state-manipulating function
newO.state
// 3
o.plus.apply(newO,[]) // call o's function, but hijack the 'this' reference to point to newO
newO.state
// 4
クール:
は、ここでそのすべてがアップするスピード私たちを取得するためにどのように動作するかを示すための簡単な例です。だから私は、特定のjqueryプラグインを使用してJavaScriptでnullポインタの問題を解決する関数を書いた。 jQueryのセットが空の場合、それだけで機能を実行しません:それは複数の要素のjQueryのセットに一般うかどうかを確認するにはapplyIfPresent($("input"),"css",["background","blue"]);
:
var applyIfPresent = function(jqObj,func,args){
//only works if jquery has the func you supply
if(jqObj.length){
jqObj[func].apply(jqObj,args);
}
}
私は簡単なテストを実行しました。それはうまくいくようですが、jQueryの内部とthis
の使い方がどのようにそのスキーマに変換されるのか分かりません。私はそれが魔法のように動作するように思えるが、正直なところ、私は魔法を少し恐れることを学んだ。
f.applyまたはjQueryがそれをどのように機能させるにはどうすればよいですか?
を行うのと同じです。 ( 'Function.apply')はちょうど"標準 "JavaScriptであるので、どういう疑問がありますか? –
' apply'の仕組みを知っているようですが、jQueryのAPIの使い方を知っているようです。私はあなたが実際にあなたを混乱させているのは明らかではないと思います。あなたの 'applyIfPresent()'関数は、 'length'プロパティ、jQueryを持つオブジェクトで動作します。 –
'length'がゼロの場合、jQueryメソッドはノーオペレーションですか?私。 '' input() ''と入力します。 '' input() ''、 '' blue '') 。 – Domenic