質問

私は勉強している 申し込み そして、私が研究しているコードが1つのパラメーターのみを適用するだけで適用する理由を理解しようとしています。

私は最初にquoを定義します:

var Quo = function(string) {
  this.status = string;
};

次に、get_statusを定義します:

Quo.prototype.get_status = function() {
  return this.status;
};

StatusObjectを定義します:

var statusObject = {
  status: 'yo!'
};

そして、これは私が迷子になった場所です:

var status = Quo.prototype.get_status.apply(statusObject);
// status is 'yo!'

による ドキュメンテーション 「適用されたこの値とアレイとして提供される引数を使用して関数を呼び出します。」ケースでは、Apply Iを使用して単一のパラメーターのみを渡すことができます。これは「これ」を定義していると思います。この方法で正確に何が起こっているのか、なぜ適用が必要なのか、そしてこの場合、2つが必要な場合に1つのPARAMをメソッドに渡すことができる理由をクリアできますか?ありがとうございました。

役に立ちましたか?

解決

apply 最初のパラメーターで提供されるオブジェクトに適用される関数のコンテキストを設定します。

var o;
function baz(a, b, c) {
  //do stuff
}

o = {
  foo: 'bar'
};

baz.apply(o);
//this is o
//a is undefined
//b is undefined
//c is undefined

アレイが2番目のパラメーターとして渡された場合、パラメーターは配列の値に基づいて設定されます。

baz.apply(o, [1,2,3]);

//this is o
//a is 1
//b is 2
//c is 3

2番目のパラメーター apply ただし、オプションです call 通常、設定コンテキストに使用されます。

//these do the same thing
baz.call(o);
baz.apply(o);

//this is how they're different
baz.call(o, 1, 2, 3);
baz.apply(o, [1, 2, 3]);

他のヒント

2つが必要であるとは述べていません:

fun.apply(thisArg[, argsArray])

方法に注意してください argsArray ブラケットにあり、オプションです。

あなたの電話で起こっていることは、あなたの statusObject として渡されます this あなたへの議論 get_status 関数。

これは、それを意味します get_status 実行して実行します return this.status 本質的に戻ってきます statusObject.status.

Applyは多くの理由で役立ちます。その1つは、方法を動的に呼び出すことです。オブジェクト内のメソッドの文字列名を渡すことができます。

methods = {
    init: function(message) {
        alert(message);
    }
};
function executeFunc(method) {
    methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
}

//now I can call like this:
executeFunc('init', 'Hey there, this is a message');

この例は、私のjqueryプラグインスケルトンにあります github

apply 1つの引数、ASを使用するオブジェクトを取ります this, 、議論が続きます ある場合.

関数に引数がない場合、例えばあなたが持っています function f() { ... }, 、引数を渡す必要はないので、電話することができます f.apply(someObject);.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top