JavaScript中的this关键字

来源:互联网 发布:三菱plc步进编程实例 编辑:程序博客网 时间:2024/05/05 14:45

js中的this关键字和其他的面向对象语言中的this是不同的。

下面通过对java中this关键字和js中的this关键字的内存分析来说明他们之间的不同


一.内存分析


1.   java中this关键字


this指的是当前对象(对象自身的引用)

        

this为什么存在于堆中?

this关键字在方法内部使用,表示对“调用方法的那个对象”的引用。所以既然this方法只能在方法内部使用,那么他表示的就是一个局部的含义,相当于一个局部变量。而局部变量是存放在内存中的栈中的,当那个方法执行完,this就消失了!但是与局部变量不同的是,在同一个类里面,每个方法里面都存在this!this就相当于对象的一个属性了,不管我们使用还是不使用,他总是存在的! 这也是this存在堆中的原因!


2.      Js中this关键字


关键字 this 指向调用该方法的对象;用在对象的方法中。使用 this即可在任何多个地方重用同一个函数。

           

正如上图所示:thisJavascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用

经过和上面的对比可以得出一个结论,js中的this依存于方法只有当方法被调用的时候this才会起作用来决定指向的是谁!而java中的this却可以看成是对象自己的一个属性不依赖于方法,只要对象存在this就存在


二.Js中this的使用


Js中 this总是指向调用该方法的对象,那么就从方法为切入点来分析this的使用


1.      在window中定义function中使用this关键字



这种定义方法调用方式有两种,他们的调用方式都能找到相应内存中的function- Method(有名方法),并执行。
但是执行结果却不同原因就是:方法由谁调用,则this表示谁。

一种是直接调用

Method()的调用者是window.

对window有所理解的人应该知道,Javascript页面级的作用域为window,即缺省有名对象都相当于window的一个属性,如定义var a;相当于指定window.a属性,定义function b同样相当于指定window.b属性。所以Method()的调用相当于window.Method()调用,调用者为window,所以this==window返回true;


一种是通过对象调用

Obj.Method()调用者为Obj,所以this==Obj返回true;


2.      在一个对象中定义一个公有属性和方法中使用this关键字




这种定义方式只有一种调用方式,通过对象调用;

但是getP函数仅定义了一次,在不同的场合运行,显示了不同的运行结果,这是有this指针的变化所决定的。

Jsthis处理机制:方法由谁调用,则this表示谁。

obj1getP方法中,obj1调用了此方法那么this就指向了obj1对象;

obj2getP方法中,obj2调用了此方法那么this就指向了obj2对象;并通过this指针引用到了两个对象都具有的属性p。

this指针的性质,也可以更好的理解JavaScript中对象的本质:一个对象就是由一个或多个属性(方法)组成的集合。每个集合元素不是仅能属于一个集合,而是可以动态的属于多个集合。这样,一个方法(集合元素)由谁调用,this指针就指向谁。


3.      在构造函数中使用this关键字



做一个修改来表明在构造函数中使用的this不是全局对象





1 0
原创粉丝点击