很多人都知道this指針,這篇文章的主要目的是為瞭培訓我們公司的新人。默認的this指針指向規則1this指針默認指向方法調用時為其指定的對象,如:obj.fun(),fun方法體中的this指針指向obj。
1 var user = { name: '段光偉' };
2 user.getName = function(){ return this.name; };
3 user.getName(); //返回‘段光偉’
1 var user = { name: '段光偉' };
2 user.getName = function(){ return this.name; };
3 user.getName(); //返回‘段光偉’
4
5 window.name = '李妞妞';
6 window.getName = user.getName
7 window.getName(); //返回‘李妞妞’
8 getName(); //返回‘李妞妞’規則2如果在方法調用時沒有為方法指定對象則this指針默認指向window,如:fun(),fun方法體中的this指針指向window。
1 var fun = function(){
2 return this;
3 }
4 fun(); //返回window對象規則3沒有在方法體中的代碼可以看作執行在一個匿名方法,根據規則2可以推論出其this指針指向window。
1 this //window對象改變this指針的默認指向使用apply1 var user = { name: '段光偉' };
2 user.hi= function(message){ return this.name+':'+message; };
3 window.name = '李妞妞'
4 user.hi('你好'); //輸出‘段光偉:你好’
5 user.hi.apply(window, ['你好']); //輸出‘李妞妞:你好’使用call1 var user = { name: '段光偉' };
2 user.hi= function(message){ return this.name+':'+message; };
3 window.name = '李妞妞'
4 user.hi('你好'); //輸出‘段光偉:你好’
5 user.hi.call(window, '你好'); //輸出‘李妞妞:你好’構造函數中的this指向構造函數中的this指針默認指向執行正在構造的對象。
1 var User = function(name){
2 this.name = name;
3 };
4 User.prototype.hi = function(){
5 return this.name;
6 };
7 var user = new User('段光偉');
8 user.hi(); //輸出‘段光偉’最後的小測試猜猜最後的輸出時什麼?
1 var User = function(name){
2 this.name = name;
3 };
4 User.prototype.hi = function(){
5 return this.name;
6 };
7 var user = new User('段光偉');
8 user.hi(); //輸出‘段光偉’
9
10 var hi = user.hi;
11
12 hi(); //猜猜這裡的輸出object expression.method();會被翻譯為object expression.method.call(object expression);。而var temp = object expression.method;temp();會被翻譯為var temp = object expression.method;temp.call(window)。