參考**
語法:
語法:
fun.call(thisarg[, arg1[, arg2[, ...]]])
var a =
}var b = a.fn;
// 接受的是乙個陣列
var a =
}var b = a.fn;
// 接受的是引數
b.call(a,1,2) // 3
var a =
}var b = a.fn;
b.bind(a,1,2)
以上code我們會發現並沒有輸出.
bind()方法建立乙個新的函式, 當被呼叫時,將其this關鍵字設定為提供的值,在呼叫新函式時,在任何提供之前提供乙個給定的引數序列。
所以我們可以看出,bind 是建立乙個新的函式,我們必須要手動去呼叫:
var a =
}var b = a.fn;
b.bind(a,1,2)() // 3
偽**
var a = new myfunction("li","cherry");
new myfunction;
obj.__proto__ = myfunction.prototype;
var result = myfunction.call(obj,"li","cherry");
return typeof result === 'obj'? result : obj;
}
所以我們可以看到,在 new 的過程中,我們是使用 call 改變了 this 的指向。// 實現繼承
function animal(name)
}function cat(name)
var cat = new cat('black cat');
console.dir(cat)
cat.showname();
// 陣列追加
var array1 = [1, 2, 3, 4, 5];
var array2 = ['ss','dd','adf','iu'];
// 在誰的基礎上進行增加
console.log(array2);
//獲取陣列中的最大值和最小值
var num = [1,2,4,5,6,7,9];
console.log(maxnum);
console.log(minnum);
// 將偽陣列轉為陣列
var fakearr = ;
var arr1 = array.prototype.slice.call(fakearr);
console.log(arr1[0]);
var arr2 = .slice.call(fakearr);
console.log(arr2[0]);
arr1.push('c');
console.log(arr1);
//儲存this變數
var foo = );}}
var foo = .bind(this))
}}
apply,call,bind個人總結
首先他們是用來改變呼叫方法中this的指向的,而且他們都是function的prototype。分別為 function.prototype.call function.prototype.bind 引數1 thisarg 物件也就是需要指向this的物件 引數2 argsarray 陣列 會按對應...
手動實現apply call bind
window.a 1 定義乙個全域性變數 var obj 定義乙個物件用來繫結 var funct function b,c 定義乙個函式用來執行 funct 1,2 1 1 2 直接執行,相當於window.funct 1,2 this繫結於window base base window 傳遞繫結...
apply call bind方法呼叫
恢復內容開始 首先這三個方法的作用都是用來改變this的值,而this的值一般有幾種情況。1 函式作為乙個物件的乙個方法來呼叫,此時this的值指向物件。var a a.f 1 2 函式的正常呼叫,此時的this指向全域性物件,一般來說是window物件。function f x f 1 3 正常函...