`
han2000lei
  • 浏览: 273762 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

javascript中的this

阅读更多
javascript中的this:


先来看一段代码:

function test(){  //定义一个函数
    alert(this.p);
}
//定义两个对象
var obj1=new Object();
var obj2=new Object();
//给两个对象都添加属性p,并分别等于1和2
obj1.p=1;
obj2.p=2;
//给obj1添加方法,这个方法是我们前面定义的函数,用于显示p的值
obj1.getP= test; 

obj1.getP();//调用obj1的getP方法,输出值为1
obj2.getP=obj1.getP;//使obj2的getP方法等于obj1的getP方法
obj2.getP(); //调用obj2的getP方法,输出值为2
下面来作一下说明:
    这是一个函数作为对象的方法来使用的一个例子,在这种情况下很简单。这个函数中的this是被哪个对象调用的,那么这个this就代表谁。但要注意,要在使用之前一定要让这个函数作为对象的一个方法,就像上面ojb1.getP=test;。在这个例子中,ojb2.getP=obj1.getP也是让obj2.getP的指针指向了test函数。
那么,当这个函数单纯使用的时候,这个this又代表什么呢?
var p = "this is window object p";
function test(){  //还是以这个函数为例
    alert(this.p);
}
test();  //输出this is window object p
可以看到它的输出是全局变量 p 的值,这是为什么呢?
    这是因为:当javascript解释器开始运行时,会首先创建一个全局对象,而全局变量是这个全局对象的属性,所有的方法就是这个全局对象的方法。在客户端的javascript中,这个全局对象名为:window。在调用时如果前面没有指定对象,那么它就是全局对象window。所以出现以上结果也就好理解了。

下面看一下构造函数中的this;
    function Rectangle(w,h){
        this.width = w;
        this.height= h;
    }
    var rect = new Rectangle(20,10);
    上面代码中代表的this是代表的谁呢?按上面所说的,如果单独调用时它就代表window。但构造函数一般来说都不是为了单独使用而定义的,都是为了创建对象而定义的。所以当创建对象时,这个this是什么呢?那就告诉你,它代表的就是创建的这个对象。估计大家都会说,你这不是废话吗?这还用说?呵呵,大家只要这么说,那就是太好了,我很高兴,知道大家的水平提高了。但是你知道为什么是代表了被新创建的这个对象吗? 我们不但要“知其然”,更要“知其所以然”。下面来解释一下:看最后一句代码:
var rect = new Rectangle(20,10);

当执行这句代码时,构造函数遇到了new关键字,就会马上创建一个空的对象,注意,这时的对象没有任何属性和方法,紧跟着这个对象被隐式的传递到构造函数中去,在构造函数中为这个对象赋值,于是对象便有了初始的属性了。所以在这其中,this就代表的是这个新创建的对象。
分享到:
评论
1 楼 yudylaw 2009-04-22  
楼主的这几篇JS文章不错。

相关推荐

Global site tag (gtag.js) - Google Analytics