Posted on 2008-02-11 10:20
oxl 阅读(1179)
评论(0) 编辑 收藏 所属分类:
技术感语
全局范围内申明的变量其实就是window对象的属性,比如说:
1 var test;
我们可以用下面的方式得到它:
1 window.test
2 this.test
因为在顶级范围,this指向window对象,可以这么认为,this指向window作用域。
我们定义一个对象:
1 var obj1 = {name: "oxl", func: function() {alert(this.name);}};
2 var obj2 = {name: "blogjava", func: function() {alert(this.name);}};
这个时候,obj1和obj2都是window的属性,我们可以通过obj1.name访问obj1的name属性(obj2也同样),通过obj1.func()访问obj1的func方法。注意,这里使用this访问对象的name属性,因为这时func是obj1的方法,所以this指向的是obj1,所以,this.name其实就是obj1.name。
我们又可以这样去调用obj1的方法:
1 obj1.func.call(obj2);
这时,在obj1.func函数中,所有的this都是指向obj2,与obj1没有任何关系,所以这时this.name其实就是obj2.name。
总结:从上面我们可以这样认为,this总是指向自己的作用域范围,全局范围中它指向window,而在对象中,它指向对象,如果指定一个对象做为它的作用域,它指向这个对象。在Ext中就用到这样的方式,因为在onReady函数的第二个参数就作用域指定,估计也是用call方式指定作用域外。