2016-06-15 16 views
0

this answerを見た後、addTogether.bindを再割り当てしてコンテキスト引数なしで呼び出せるかどうかが不思議になりました。私が試したさまざまな方法のいくつかは以下の通りです:.bind()の文脈引数を取り除く方法

function addTogether(a,b) { 
    return a+b; 
} 

// something here to make the following possible 

console.log(typeof addTogether.bind(2)); // "function" 
console.log(addTogether.bind(2)(3)); // 5 
console.log(addTogether(2,3)); // 5 

答えて

1

いいえ、コンテキスト引数をFunction.prototype.bindにすることはできません。あなたはそうすることができます

function addTogether(a,b) { 
    return a+b; 
} 
addTogether_bind = (Function.prototype.bind).bind(addTogether, null); 
//                ^^^^ 
console.log(typeof addTogether_bind(2)); // "function" 
console.log(addTogether_bind(2)(3)); // 5 
console.log(addTogether(2,3)); // 5 
+0

ああ、ああ! '.bind.bind()'に2つの引数を指定するべきであることを忘れた –

+0

あなたは 'partial'を' bind'に切り替えることができると分かります。それは可能ですか?あなたがそれが不可能であると言う部分を削除するなら、私はこれを受け入れます。 –

+0

@PatrickRoberts:名前を 'bind'に変更することはできますが、それはまだ別の機能です。 Madaraが指摘したのと同じ理由で、 '.bind'プロパティを上書きしないでください。実際、 '.partial'はもはやメソッドではなく、名前空間のためにそこに置いて、それを完全にスタンドアロンの変数に割り当てることも同様に働いています。 – Bergi

0

あなたはFunction.prototypeを変更する必要があり、そのような何か:

Function.prototype.partiallyApply = function(...args) { 
    return this.bind(null, ...args); 
}; 

// these are intended as separate attempts, don't execute all of them sequentially 
addTogether.bind = addTogether.bind.bind(addTogether.bind); 
addTogether.bind = addTogether.bind.bind(addTogether.bind(addTogether)); 
addTogether.bind = addTogether.bind.bind(addTogether); 
addTogether.bind = addTogether.bind(addTogether); 

私の意図は、このようにすることです

その後、

const addTwo = addTogether.partiallyApply(2); 

また、直接あなたが本当に、ノー

  • それを呼び出すことができるようにどこかに一時的に古いものを維持する必要がありますない
  • を行い.bind()が、

    1. を変更することができます。しないでください。
  • +0

    母、良い点。これは、それらの「何か」の質問の1つに過ぎません。私は決して_really_これを生産コードやそのようなものでは決してしません。しかし、提案に感謝します。 –

    関連する問題