call: 執(zhí)行一個(gè)方法冀瓦,將其執(zhí)行環(huán)境轉(zhuǎn)換成第一個(gè)參數(shù),后續(xù)參數(shù)為此方法的參數(shù),call(obj, param1,...,paramX)袍镀;
//情況一
var a = 1
Object.prototype.toString.call(a) //[object Number]
//情況二
var a = function(){
return this.a
}
var b = {
a: 1
}
a.call(b) // 1
apply:和call作用相似,后續(xù)參數(shù)以一個(gè)數(shù)組傳入, apply(object, [param1,..,paramX])
var a = function(num1, num2){
return num1 + num2 + this.initNum
}
var b = {
initNum: 100
}
a.call(b, 1, 2) //103
a.apply(b, [1, 2]) //103
bind: 將一個(gè)函數(shù)的執(zhí)行環(huán)境綁定為傳入?yún)?shù)冻晤,返回綁定后的函數(shù)苇羡,此函數(shù)無論在哪里調(diào)用,執(zhí)行環(huán)境永遠(yuǎn)為傳入?yún)?shù)
function a(){
return this.name
}
var b = {name:'Theo'}
var c = a.bind(b)
c() //Theo
var d = {
name: 'hello',
showName: c
}
d.showName() //Theo
caller:返回一個(gè)函數(shù)的引用鼻弧,其實(shí)為該函數(shù)的執(zhí)行環(huán)境设江。
//情況一
var a = function(){
return a.caller
}
a() // 因?yàn)槭窃谌汁h(huán)境下锦茁,此處返回null
//情況二
var a = function(){
return a.caller
}
var b = function(){
return a()
}
b() // 因?yàn)槭莃的函數(shù)環(huán)境下執(zhí)行caller,所以此處返回b
callee:arguments的一個(gè)屬性绣硝,返回這個(gè)該函數(shù)蜻势。
var a = function(){
return arguments.callee
}
a() //返回a的