apply call bind 使用總結

2021-09-24 12:34:54 字數 1633 閱讀 3122

參考**

語法:

語法:

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 正常函...