首頁  >  文章  >  web前端  >  Js的this指向 apply().call(),bind()的問題

Js的this指向 apply().call(),bind()的問題

一个新手
一个新手原創
2017-10-23 10:02:371471瀏覽

筆記記錄緣由:JavaScript的流行趨勢已經勢不可擋,衍生的AngularJs,Node.js,BootStrmp中小企業的後端開發越來越沒有優勢,IT不是一個可以完全靠經驗說話的崗位,IT改變生活,身為一個三年的.Net程式設計師現在深深的感受到守舊其實就是害怕,躲避時代的進度,人生需要熱情,需要動力!

正文:

一、apply().call(),bind()是做什麼的?

     這三個都是改變方法中this指向的

二、this是什麼東西?

     this指你目前呼叫的方法的執行對象,例如setTimeout方法的this


1 setTimeout(function(){
2                 console.log(this)
3            },1000)

 輸出結果:


#
Window {external: Object, chrome: Object, document: document, Alax: Object, a2: Object…}

 輸出結果:

var Alax={
         name:'Alax',
         age:27,
         fuc:function(){            
         return this.age;
         }
        }

因為setTimeout的完全呼叫時Window.setTimeout  它屬於Window對象的一個方法。

再定義一個物件

console.log((Alax.fuc).call(Alax))
console.log((Alax.fuc).apply(Alax))
console.log((Alax.fuc).bind(Alax)())

按理說使用console.log(Alax.fun)應該輸出的27但實際情況是undefined,這是為什麼呢?因為在Alax物件外呼叫時實際的作用物件時Window,而Window是不包含age屬性的,也就是說this指向改變了需要重新指定,此處先記著等講完概念在對比你心中所想

三、call,apple,bind三者的差異

    1.  參數比較

         call的參數格式是(thisvalue,arg1) 

##   call的參數格式為(thisvalue,arg1) 

##    app是(thisvalue,[arg1,ar2...]) 

         bind的參數格式為(thisvalue,arg1,ar2...) 

        thisvalue指的是指傳遞的指向,指向要傳遞的指向後面的參數是非必輸跟方法的參數一一對應,傳入了都可以用arguments獲取

   2.返回結果對比

       call和apple指將所有參數傳遞到arugements ,並直接回傳呼叫結果

       bind指將傳回一個傳入值在方法運行後傳回一個新的函數需要加上()呼叫



##################################### ###總結:上面的呼叫方式可以是         ###############
Alax={
         name:'Alax',
         age:27,
         fuc:function(num){               
         this.age+=num               
         return this.age;
         }
    }
 console.log((Alax.fuc).call(Alax,1))
 console.log((Alax.fuc).apply(Alax,[1]))
 console.log((Alax.fuc).bind(Alax)(1))
###附上參數呼叫############rrreee

以上是Js的this指向 apply().call(),bind()的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn