筆記記錄緣由: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; } }
再定義一個物件
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中文網其他相關文章!