Heim > Fragen und Antworten > Hauptteil
FastClick构造器中,有这么一段代码:
var methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];
var context = this;
for (var i = 0, l = methods.length; i < l; i++) {
context[methods[i]] = bind(context[methods[i]], context);
}
github上代码地址为:FastClick代码
我的疑问是:onMouse等方法在FastClick的prototype中了,按说context都能访问到这些方法,而且this指向也是FastClick的实例化对象,为什么还要执行:
context[methods[i]] = bind(context[methods[i]], context);
这句代码呢?毫无意义呀?哪位大神帮忙解答一下。
ringa_lee2017-04-11 11:00:02
应该是不确认调用方的调用方式,简单来说,this是指向调用这个方法时的调用方的,写个简单demo看下
var a = {b:1};
var testFun = function(){console.log(this.b)};
a.test = testFun;
a.test() // 1
var newTest = a.test;
newTest() // undefined,这时候this指向的不是a了
a.test = testFun.bind(a);
var newTest2 = a.test;
newTest2(); // 1 这时候this就绑定到a上了
怪我咯2017-04-11 11:00:02
我把题主标注的部分删除后,跑了他给的几个例子,没有发现错误。
可能是作者写习惯了。。。。
也有可能是有例外情况,那需要去查一下issues.
我也题主扩散一下问题,看看能不能得到合理的解释。