call apply bind的js實現以及應用

2021-09-12 17:13:42 字數 1299 閱讀 5773

// example

let obj = ;

function fn(c)

// 使用call是這樣轉換的

// step 1: 生成新的函式,新的執行上下文(通過在傳入物件中增加呼叫方法)

const obj =

}// step2: 執行 obj.fn(333);

let res = obj.fn(333);

// step3: obj被改變,得恢復原來的值

delete obj.fn;

function.prototype.mycall = function(context) 

const res = newcontext.fn(...args);

delete newcontext.fn;

return res;

}console.log(fn.mycall(obj, 'cccc'));

const newcontext = context || window;

newcontext.fn = this;

const args = ;

let res;

if (!arr)

else

result = context.fn(...arr);

}delete newcontext.fn;

return res;

}

改變this

借用其他物件的方法

如何實現function.prototype.bind()

function.prototype.bind = function();

}//執行

var obj =

var func = function(a, b, c, d).bind(obj, 1, 2);

func(3, 4);

繼承的實現

var afn = function()

var bfn = function()

bfn.prototype.getname = function()

//執行

var b = new bfn();

console.log(b.getname())

能借用陣列的方法,obj.array.push, 需要滿足兩個條件

var a = ;

console.log(a)

聊聊call apply bind的故事

實際上它們真正的樣子是這樣的 它們幾個的作用都是改變this的指向。bind 與另外兩個的區別則是前者改變this,不立即呼叫函式 而後者改變this,立即呼叫函式。以下例子在非嚴格模式下,注釋的是各個情況this的指向 let test test.foo test.foo.call null,1,...

寫給新人的call apply bind

語法 1 fun.call thisarg arg1 arg2 thisarg fun函式執行時指定的this值,可能的值為 例如 123 456functiona functionb a.call b functionb 經常會看到這種使用情況 123 45function list list 1...

理解 call, apply, bind 的用法

call 方法使用乙個指定的this值和單獨給出的乙個或多個引數來呼叫乙個函式。function list list 1,2,3,4,5 1 陣列的所有方法都是掛在array的prototype上的,如圖 而類陣列物件本身是沒有這些方法的,當然也無法呼叫 那麼想在一些物件上呼叫這個物件本身沒有的方法...