call: 执行一个方法,将其执行环境转换成第一个参数,后续参数为此方法的参数,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作用相似,后续参数以一个数组传入, 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: 将一个函数的执行环境绑定为传入参数,返回绑定后的函数,此函数无论在哪里调用,执行环境永远为传入参数
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:返回一个函数的引用,其实为该函数的执行环境。
//情况一
var a = function(){
return a.caller
}
a() // 因为是在全局环境下,此处返回null
//情况二
var a = function(){
return a.caller
}
var b = function(){
return a()
}
b() // 因为是b的函数环境下执行caller,所以此处返回b
callee:arguments的一个属性,返回这个该函数。
var a = function(){
return arguments.callee
}
a() //返回a的