あなたは違いを説明してもらえ:バインディング、借入方法
var obj = {
0: "A",
1: "B",
2: "C",
length: 3,
print: function(){ console.log(this) }
};
//A (borrowing method. No changes in obj):
[].join.call(obj, "+"); //-> "A+B+C"
//B:
obj.join = [].join.bind(obj);
obj.join("+"); //-> "A+B+C"
var oj = obj.join;
oj("-"); //-> "A-B-C" (binded to obj)
//C:
obj.j = [].join;
obj.j("++"); //-> "A+B+C"
var j = obj.j;
j("-"); //-> "A-B-C" (it still binded!)
//D:
var join = [].join.bind(obj)
join("+"); //-> "A+B+C"
//E (not working: [] is a new array every time):
[].join.bind(obj);
[].join("+"); //expected: "A+B+C" but I have: ""
//F (Danger!)
Array.prototype.join = [].join.bind(obj);
[].join("+"); //"A+B+C"
をあなたは説明してもらえAとBの間に違いはありますか?
BとCの違いは何ですか?
なぜEが機能しないのですか?
(その他の質問)Fの後にメソッドをアンバインドする方法を教えてください。
Array.prototype.join = [].join.bind(null);
[].join([1,2,3,4],"+"); //-> "ABC"
(https://stackoverflow.com/help/tagging) – Liam
まあ、Eは動作しませんので、 ' [] .join.bind(obj) 'と' []] .join( "+") 'は完全に別々の2つの配列です。そしてAとBの違いは、Aでは実際に 'call'を使って関数を呼び出すことです.Bでは' this'コンテキストがバインドされた関数を返し、オブジェクトの結合関数を新しくバインドされた関数に設定しています。 – mhodges
あなたはいくつかの質問をしています。 – canon