文章出處

this指針總是指向一個對象,大致可以分為以下四種:

1,作為對象的方法調用(this指向該對象)

2,作為普通函數調用

    當函數不作為對象的屬性被調用時,也就是普通函數方式,此時的this總是指向全局對象。在瀏覽器的javascript中,全局對象就是windows。 

1 window.name='globaiName';
2 var getName=function(){
3     return this.name;
4 };
5 console.log(getName());
this指向全局對象

3,構造器調用

   javascript中沒有類,但是可以從構造器中創建對象,同時也提供了new運算符,使得構造器看起來更像一個類。

   當用new運算符調用函數時,該函數總會返回一個對象,通常,構造器里的this就指向返回的這個對象

var MyClass(){
  this.name='sven';
};
var obj=new MyClass();
alert(obj.name);
構造器里的this

  但是如果構造器顯示的返回了一個object類型的對象,那么結果最終會返回這個對象。

var MyClass(){
  this.name='sven';
  return {                     //顯示返回一個對象
   name:'anne';
}
};
var obj=new MyClass();
alert(obj.name);            //輸出anne                            
構造器顯示返回object類型對象

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
用apply來修正this指向

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()