最近用js的類寫東西,發現一個無比蛋疼的事,那就是封裝的類方法中的this指針常常會改變指向,失去上下文,致使程序錯誤或崩潰。css
好比:數組
function Obj(){
this.type = "obj";
}
Obj.prototype = {
show : function (){
etTimeout(function (){
console.log(this.type);
},300)
}
var obj = new Obj();
obj.show(); //undefined緩存
所幸偉大的js有多種方法能夠解決這個問題。咱們能夠直接保存上下文的指針指向 好比 var self = this; 而後用緩存的 self指針,可是js裏面有 bind,apply,call等比較好用的方法,來指定上下文。app
語法:fn.bind(obj,arguments)函數
fn.apply(obj,arguments)this
fn.call(obj,arguments)spa
區別:prototype
1.bind返回一個方法,而其他兩個都直接調用了函數;指針
2.第一個參數都同樣,指定上下文對象,第二個參數apply是數組,而call則對應形對象