1.bind 改变了函数内部this执行的上文环境
<script>
/* 改变函数内部的this关键字的指向 */
var name ="cheng";
var obj ={
name:"li"
}
/* bind()改变了函数内部this执行的上文环境 */
var test = function(){
console.log(this.name)
}.bind(obj);
test() //li
</script>
2.call 改变函数this的指向,函数调用的时候执行
<script>
/* call改变函数this的指向,函数调用的时候执行 */
var li ="li";
var obj = {
name:"cheng"
}
var test = function(){
console.log(this.name)
}
test.call(obj) //cheng
</script>
<script>
/* call(thisObj,params) */
function sayName(label){
console.log(label+":"+this.name)
}
var name ="window";
var cheng = {
name:"cheng"
}
var wang = {
name:"wang"
}
sayName("window") //window:window
sayName.call(cheng,"chengchao") //chengchao:cheng
sayName.call(wang,"女孩子") //女孩子:wang
</script>
3.apply 改变函数this的指向,函数调用的时候执行
<script>
function go(name,age){
console.log(this.name+":"+this.age)
console.log(name)
console.log(age)
}
var li = {
name:"李梦瑶",
age:23
}
var zhang = {
name:"张三丰",
age:100
}
go.apply(li,["li",24]) //传的是数组
go.call(zhang,"zhang",111) //一个一个的传参
</script>