Javadream

A long way and a dream.

Ext 2 学习笔记(一):js变量作用域

Posted on 2008-02-11 10:20 oxl 阅读(1172) 评论(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方式指定作用域外。

只有注册用户登录后才能发表评论。


网站导航: