最近用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则对应形对象