func.call(thisvalue, arg1, arg2, ...);
第乙個引數就是this所要指向的那個物件,後面的引數則是函式呼叫時所需要的引數.
例:function add(a, b)
add.call(this, 1, 2);
call方法的乙個應用是呼叫物件的原生方法
var obj = {};
obj.hasownproperty('tostring'); //false
obj.hasownproperty = function ()
obj.hasownproperty('tostring'); //true
object.prototype.hasownproperty.call(obj, 'tostring'); //false
時的引數,使用格式如下:
function f(x, y)
f.call(this,1,1);
function.prototype.bind()
bind方法用於將函式體內的this繫結到某個物件,然後返回乙個新函式.
var print = console.log;
print(4);
//報錯,因為此時console.log中的this物件已經不指向console了
使用bing解決這個問題
var print = console.log.bind(console);
print(2);
例:var counter =
};counter.count; //0
counter.inc();
counter.count(); //1
this指向莫名的改變
var counter =
};var func = counter.inc;
func();//此時this指向window,莫名改變了...
如何解決這個問題,使用bind
var func = counter.inc.bind(counter);
將inc內部的this繫結到counter物件上
var add = function(x, y) ;
var obj = ;
var newadd = add.bind(obj, 5);
newadd(5); //20
call方法與bind方法的結合使用
[1, 2, 3].slice(0, 1);
array.prototype.slice.call([1, 2, 3], 0, 1);
var slice = function.prototype.call.bind(array.prototype.slice);
slice([1, 2, 3], 0, 1);
js中call,apply和bind方法
語法 任意函式.call 任意物件,引數1,引數2 特徵 call能呼叫函式,後面可傳入多個引數,用逗號隔開 3.價值 任意物件都能呼叫任意函式 功能 function fn a,b var obj2 fn.call obj2,你好 6 這樣就能為obj2新增乙個屬性abc,值為 你好6 原因是使用...
js 中call apply和bind的區別與聯絡
1 都是用來改變函式的this物件的指向的。2 第乙個引數都是this要指向的物件。3 都可以利用後續引數傳參。var xw var xh xw.say 輸出是小王,男,今年24 而如果我們想用xw的say方法顯示xh的資料,則 1 call xw.say.call xh 3 bind xw.say...
原生JS 封裝call apply 函式
var value window var obj function show name,age 改變this指向的原理大概是這個樣子的 obj.show show obj.show delete obj.show 很簡單的過程,應該都能明白在函式的原型鏈上封裝兩個函式 封裝call函式 functi...