this call和apply

來源:互聯網
上載者:User

標籤:

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

  他們的作用一樣,區別在於傳入參數的形式不同。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指向

 

this call和apply

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.