面试:JavaScript 中 call()、apply()、bind()用法以及区别
例一:
var name = 'ldh',age=18;
var obj= {
name: 'kukudehu',
objAge:this.age,
myFun:function(){
console.log( this.name+'年龄'+this.age);
}
}
结果:
obj.objAge; // 18
obj.myFun() // kukudehu年龄 undefined
例二:
var fav='zzh';
function shows(){
console.log(this.fav)
}
结果:
shows() //zzh
通过两个例子可以看出this指向的位置是不同的,例一this指向obj,例二this指向的是window;
1、有了上面的两个例子我们接下来看一下call()、apply()、bind()是怎么定义this的
如:
var name = '嘉文',age=31;
var obj= {
name:'赵信',
objAge:this.age,
myFun:function(){
console.log(this.name+"年龄"+this.age);
}
}
var db={
name:'德玛',
age:99
}
结果:
obj.myFun.call(db); // 德玛年龄 99
obj.myFun.apply(db); // 德玛年龄 99
obj.myFun.bind(db)(); // 德玛年龄 99
注:bind方法后面有一对空格,所以得出结论bind返回的是一个函数必须调用才会执行。
如果对您有用请点亮,欢迎大家提出质疑疑问。kukudehu!