次のサンプル Javascript コードがあるとします。
var modeller = "foo";
var provider1 = function (modeller, content, optionalArg) {
alert("this: " + this + ", content: " + content + ", optionalArg: " + optionalArg);
}.bind(null, modeller);
var provider2 = function (content, optionalArg) {
alert("this: " + this + ", content: " + content + ", optionalArg: " + optionalArg);
};
var createConsumer = function () {
// some arbitrary private vars
var content = 1;
var option = 2;
var doConsume = function(provider) {
provider.apply(this, [content, option])
};
return {consume: doConsume};
};
// Now use them
var consumer = createConsumer();
consumer.consume(provider1);
consumer.consume(provider2);
これはデモ用に大幅に簡略化されていますが、要点はprovider1
既にバインドされており、バインドされていないということです。消費者は自分自身を の引数provider2
として渡すことはできません。this
provider1
質問:関数が既にバインドされているこの種のケースを検出する方法はありますか? provider1
コンシューマを次のように使用する方法はありthis
ますか? 答えが「いいえ」であると仮定すると、この種の状況を回避する最善の方法は何ですか?