javasript中有三个函数可以改变对象的上下文环境:apply、call和bind

1.apply

var obj = {name:'haha'};
function test(age){
	console.log(this.name,age);
}
console.log(test.apply(obj,[21]));//haha 21

2.call

var obj = {name:'haha'};
function test(age){
	console.log(this.name,age);
}
console.log(test.apply(obj,21));//haha 21

3.bind

var obj = {name:'haha'};
function test(){
	console.log(this.name);
}
console.log(test.bind(obj)());//haha

综上可以看出:call和apply的返回结果是相同的都是函数执行后的结果,只是参数的格式不一样,而call(apply)与bind的区别在于,bind执行后返回是原来函数,只是上下文环境发生了变化,并没有立马执行