window.name = '麻云';
var obj = {
name:'麻花疼',
}
function getName(){
console.log(getName.length);
console.log(this.name);
}
obj.getName = getName;
obj.getName(); //this指向obj 麻花疼
getName();////this指向window 麻云
那么this 关键字所指向的是当前函数运行时所处在的环境。
bind(),call(),apply();方法可以改变函数this的指向。
getName.bind(obj)();
getName.call(obj,1,2,3);
getName.apply(this,[1,2,3]);
全部都指向obj,那么这3个如何区分?
bind方法不会立即执行函数,返回的是函数,并不调用,需要自己加()后调用;
call,apply的第一个参数就是将this指向谁。
getName.call(this),getName.apply(this)这么写是毫无意义的,this参数指的是getName调用的环境;
自己改变自己的this指向,并且指向自己,就等同于getName();
getName.call(null),,getName.apply(null)传null也是一样的
call方法不限制接受的参数;
apply方法接受两个参数,第二个参数必须是数组;
应用:使用apply传数组参数到Math的max,min方法来活得数组中的最大值,最小值;
var a = [1,2,3,4,5,6,7,8,9,0];
var nMax = Math.max.apply(this,a);
var nMin = Math.min.apply(this,a);
console.log(nMax);
console.log(nMin);
为了要传第二个参数a,所以第一个参数写this,null都可以;
网友评论