文章出處

this指向全局對象

構造器里的this
構造器顯示返回object類型對象
用apply來修正this指向
文章列表
this指針總是指向一個對象,大致可以分為以下四種:
1,作為對象的方法調用(this指向該對象)
2,作為普通函數調用
當函數不作為對象的屬性被調用時,也就是普通函數方式,此時的this總是指向全局對象。在瀏覽器的javascript中,全局對象就是windows。


1 window.name='globaiName'; 2 var getName=function(){ 3 return this.name; 4 }; 5 console.log(getName());
3,構造器調用
javascript中沒有類,但是可以從構造器中創建對象,同時也提供了new運算符,使得構造器看起來更像一個類。
當用new運算符調用函數時,該函數總會返回一個對象,通常,構造器里的this就指向返回的這個對象


var MyClass(){ this.name='sven'; }; var obj=new MyClass(); alert(obj.name);
但是如果構造器顯示的返回了一個object類型的對象,那么結果最終會返回這個對象。

var MyClass(){ this.name='sven'; return { //顯示返回一個對象 name:'anne'; } }; var obj=new MyClass(); alert(obj.name); //輸出anne
4,Function.prototype.call 和 Function.prototype.apply
每個函數都具有call()和apply()方法,他們的作用一樣,區別在于傳入參數的形式不同。
apply接受兩個參數,第一個參數指定了函數體內this對象的指向,第二個參數作為一個帶下標的集合,可以是數組,也可以是類數組。
call傳入的參數數量不固定,第一個參數指定了函數體內this對象的指向,從第二個參數開始,每個參數被依次傳入函數。
如果我們傳入的第一個參數是null時,函數體內的this會指向默認的宿主對象,在瀏覽器中就是window。

1 document.getElementById = (function (func){ 2 return function(){ 3 return func.apply(document,arguments); 4 } 5 })(document.getElementById); 6 var getId = document.getElementById; 7 var div = getId('div1'); 8 alert(div.id); //輸出div1
文章列表
全站熱搜