陕西网站建设宣传方案,便捷的网站建设,怎样做自己的销售网站6,公司网页制作选择软件查看this指向的一句话法则#xff1a;永远指向其所在函数的所有者如果没有所有者时#xff0c;指向window。理解this的要点#xff1a;关键在于将函数与函数名分开看待。同一个函数#xff0c;在不同的执行方法下#xff0c;会有不同的效果。如何来进行理解呢#xff0c;… 查看this指向的一句话法则 永远指向其所在函数的所有者如果没有所有者时指向window。 理解this的要点关键在于将函数与函数名分开看待。同一个函数在不同的执行方法下会有不同的效果。 如何来进行理解呢来看几个实例 1全局函数中的this指向 function test(){ alert(this);//test这个函数没有所有者因此此时this指向的是window} 2对象方法中的this指向 o.test function(){ alert(thiso);//输出trueo.test表示的是test这个函数的所有者是对象o因此this应当是指向o的} 3绑定函数时的this 1 如下代码test1和test2中this并不相同 var test2 o.test1;//test2这个函数并没有所有者在此test2虽然调用了test1这个函数但是this仍然指向window而不是指向test1的拥有者对象otest2();o.test1 function(){ alert(thiso);} 这便是上面所说的要将函数与函数名分开看待 4绑定函数时的this 2 此时如果我们对3中的代码进行一些修改 function test () { alert(this o);}test();//this指向windowvar o {};o.test2 test;o.test2();//此时test2的所有者为o而test没有所有者this在此时指向的是oalert(o.test2); 5鼠标单击事件等进行函数的绑定时this的指向 document.onclickfunction(){ alert(thisdocument);//输出为trueonclick事件的拥有者是document。因此此处this指向document。我们可以将document.onclick理解为一个对象方法如同例4中的o.test2一样。} 6setTimeout等传参形式的this指向 不要去看传的参数中函数的所有者看执行函数的所有var obj {}; obj.x 1;obj.y 2;window.x 100;window.y 200;obj.add function () { alert(this.x this.y);}setTimeout(obj.add,1000);//this指向window,输出为300setTimeout(function(){//this指向obj输出为3 obj.add();},1000); 改变this的方法call,apply call和apply两者用于改变函数的作用域 var oo {};oo.test3 function(){ alert(this oo);//返回false}var ooo {};oo.test3.call(ooo);//this指向的是内的第一个参数此处为ooowindow.x 100;var oo {};oo.test3 function(y,z,k){//函数的参数与apply、call中第二个以及之后的参数相对应 alert(this.xyzk);}var arr[2,3,4]oo.test3.call(window,2,3,4);//this指向window输出为109oo.test3.apply(window,[2,3,4]);//同上使用apply进行元素罗列时需要使用中括号[]将所有参数包裹起来oo.test3.apply(window,arr);//同上使用apply对于一个数组的访问很简单使用数组名称即可oo.test3.call(window,arr[0],arr[1],arr[2]);//同上 转载自http://blog.163.com/hongshaoguoguo126/blog/static/18046981201251935720333/