call
function
fn(x,y)
console.
log(x+y)
;//11
}var obj =
//語法:
fn.call
(obj,2,
9)
應用
var obj =
;array.prototype.push.
call
(obj,30)
console.
log(obj)
call
(obj,0,
2)console.
log(obj)
//
var obj1 =
console.
log(obj1.
tostring()
);//[object object]
var arr =[2
,9];
console.
log(arr.
tostring()
);//2,9
console.
log(object.prototype.tostring.
call
(arr));
//[object array]
function
fn(x,y)
var obj =
fn.(obj,[2
,9])
var arr =[1
,2,3
,4,5
];console.
log(math.
max(arr));
//nan
console.
log(math.max.
(math,arr)
)//5
console.log.
(console,arr)
//1 2 3 4 5
bind
bind() 函式會建立乙個新函式(稱為繫結函式),新函式與被調函式(繫結函式的目標函式)具有相同的函式體(在 ecmascript 5 規範中內建的call屬性)。
當目標函式被呼叫時 this 值繫結到 bind() 的第乙個引數,該引數不能被重寫。繫結函式被呼叫時,bind() 也接受預設的引數提供給原函式。
乙個繫結函式也能使用new操作符建立物件:這種行為就像把原函式當成構造器。提供的 this 值被忽略,同時呼叫時的引數被提供給模擬函式。
語法:
fun.
bind
(thisarg[
, arg1[
, arg2[
,...]]
])
引數:
arg1, arg2, …
返回值:
返回由指定的this值和初始化引數改造的原函式拷貝。
示例1:
this
.x =9;
var module =};
module.
getx()
;// 返回 81
var retrievex = module.getx;
retrievex()
;// 返回 9, 在這種情況下,"this"指向全域性作用域
// 建立乙個新函式,將"this"繫結到module物件
// 新手可能會被全域性的x變數和module裡的屬性x所迷惑
var boundgetx = retrievex.
bind
(module)
;boundgetx()
;// 返回 81
示例2:
function
latebloomer()
// declare bloom after a delay of 1 second
latebloomer.prototype.
bloom
=function()
;latebloomer.prototype.
declare
=function()
;var flower =
newlatebloomer()
;flower.
bloom()
;// 一秒鐘後, 呼叫'declare'方法
小結
bind
簡單的說
call apply和bind的原理
call 作用 call 方法就是使用乙個指定this值和若干個指定引數值的前提下呼叫摸個函式或方法。var foo function bar 如果不對this進行繫結執行bar 會返回undefined bar.call foo 1也就是說call 改變了this的指向,指向了foo 下面進行一下...
call apply和bind的用法
在改變this指向的時候,經常會把這三個方法混淆,下面就詳細的整理一下三者的用法和區別 var a var b b.sayname.call a,1,2,3 輸出 張三 6第乙個引數是改變 this 指向的物件 第二個引數必須是乙個陣列 使用後會自動執行 var a var b var arr 1,...
call apply和bind方法詳解
call方法 使用乙個指定的this值和單獨給出的乙個或多個引數來呼叫函式。var obj function getname name getname.call obj mei var obj function getname name,age 這兩種方法的用途很多,下面我就舉幾個例子。1.基本用法...