博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
this 的使用方法 —— javascript中的this讲解! (share)
阅读量:7195 次
发布时间:2019-06-29

本文共 1906 字,大约阅读时间需要 6 分钟。

我一同学总结的关于this的用法,个人感觉总结的挺全面的,和大家分享一下。

原文:

从自己刚刚开始学习javascript到现在已经很久了,今天得益于新酱的细心讲解,总算是把this这个“雾中花”看清晰了。

在此首先感谢新酱的讲解
下面将this的一些基本使用和大家分享一下:
查看this指向的一句话法则:
 
永远指向其所在函数的所有者如果没有所有者时,指向window。
理解this的要点:关键在于将函数与函数名分开看待。同一个函数,在不同的执行方法下,会有不同的效果
 
如何来进行理解呢,来看几个实例
1)全局函数中的this指向

function test(){

alert(this);//test这个函数没有所有者,因此此时this指向的是window
}

2)对象方法中的this指向

o.test =function(){

alert(this==o);//输出true,o.test表示的是test这个函数的所有者是对象o,因此this应当是指向o的

}

3)绑定函数时的this 1
如下代码,test1和test2中this并不相同

var test2 = o.test1;//test2这个函数并没有所有者,在此,test2虽然调用了test1这个函数,但是this仍然指向window,而不是指向test1的拥有者:对象o

test2();
o.test1 =function(){

alert(this===o);

}

这便是上面所说的,要将函数与函数名分开看待
4)绑定函数时的this 2
此时如果我们对3)中的代码进行一些修改:

function test (){

alert(this=== o);
}
test();//this指向window
var o ={};
o.test2 = test;
o.test2();//此时test2的所有者为o,而test没有所有者,this在此时指向的是o
alert(o.test2);

5)鼠标单击事件等进行函数的绑定时,this的指向

document.onclick=function(){

alert(this===document);//输出为true,onclick事件的拥有者是document。因此,此处this指向document。我们可以将document.onclick理解为一个对象方法,如同例4中的o.test2一样。

}

6)setTimeout等传参形式的this指向
不要去看传的参数中函数的所有者,看执行函数的所有var obj = {};

obj.=1;

obj.=2;
window.=100;
window.=200;
obj.add =function(){
alert(this.+this.y);
}
setTimeout(obj.add,1000);//this指向window,输出为300
setTimeout(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指向的是()内的第一个参数,此处为ooo

 

window.=100;
var oo ={};

oo.test3 =function(y,z,k){

//函数的参数与apply、call中第二个以及之后的参数相对应
alert(this.x+y+z+k);
}
var arr=[2,3,4]
oo.test3.call(window,2,3,4);//this指向window,输出为109
oo.test3.apply(window,[2,3,4]);//同上,使用apply进行元素罗列时需要使用中括号[]将所有参数包裹起来
oo.test3.apply(window,arr);//同上,使用apply对于一个数组的访问很简单,使用数组名称即可
oo.test3.call(window,arr[0],arr[1],arr[2]);//同上

本文转自挨踢前端博客园博客,原文链接http://www.cnblogs.com/duanhuajian/archive/2012/09/23/2699143.html如需转载请自行联系原作者

@挨踢前端

你可能感兴趣的文章
评论列表显示及排序,个人中心显示
查看>>
Least Common Ancestors
查看>>
Oracle数据库 之 使用DBLink访问时,提示ORA-01017
查看>>
「学习总结-Haskell-4」Haskell数据类型
查看>>
接口抽取及依赖版本统一介绍
查看>>
Andriod开发学习笔记
查看>>
phpcms_v9 多图字段 内容页,首页,分页自定义字段调用
查看>>
Linux下MySQL导入文件出错ERROR 1290 (HY000)
查看>>
POS开发问题 - 缓存问题 - 02
查看>>
JDBC编程,从入门到精通
查看>>
模板类中的友元函数
查看>>
Eclipse设置项目默认编码和换行符类型
查看>>
【实用性程序】弧微分计算圆周长
查看>>
算法模板——平衡树Treap
查看>>
1819: [JSOI]Word Query电子字典
查看>>
10分钟学会AngularJS的数据绑定
查看>>
Flash Stage3D Molehill 学习笔记(2)
查看>>
微信OpenID获取
查看>>
bzoj 2049: [Sdoi2008]Cave 洞穴勘测
查看>>
c# tcplistener 与 client通信 服务端 今天写一下
查看>>