全局范圍內申明的變量其實就是window對象的屬性,比如說:
我們可以用下面的方式得到它:
因為在頂級范圍,this指向window對象,可以這么認為,this指向window作用域。
我們定義一個對象:
這個時候,obj1和obj2都是window的屬性,我們可以通過obj1.name訪問obj1的name屬性(obj2也同樣),通過obj1.func()訪問obj1的func方法。注意,這里使用this訪問對象的name屬性,因為這時func是obj1的方法,所以this指向的是obj1,所以,this.name其實就是obj1.name。
我們又可以這樣去調用obj1的方法:
這時,在obj1.func函數中,所有的this都是指向obj2,與obj1沒有任何關系,所以這時this.name其實就是obj2.name。
總結:從上面我們可以這樣認為,this總是指向自己的作用域范圍,全局范圍中它指向window,而在對象中,它指向對象,如果指定一個對象做為它的作用域,它指向這個對象。在Ext中就用到這樣的方式,因為在onReady函數的第二個參數就作用域指定,估計也是用call方式指定作用域外。
1 var test;
我們可以用下面的方式得到它:
1 window.test
2 this.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);}};
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方式指定作用域外。