// 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上的,如圖 而類陣列物件本身是沒有這些方法的,當然也無法呼叫 那麼想在一些物件上呼叫這個物件本身沒有的方法...