search

Home  >  Q&A  >  body text

javascript - FastClick源码的一个小问题?

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);

这句代码呢?毫无意义呀?哪位大神帮忙解答一下。

怪我咯怪我咯2773 days ago374

reply all(2)I'll reply

  • ringa_lee

    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上了

    reply
    0
  • 怪我咯

    怪我咯2017-04-11 11:00:02

    我把题主标注的部分删除后,跑了他给的几个例子,没有发现错误。
    可能是作者写习惯了。。。。
    也有可能是有例外情况,那需要去查一下issues.
    我也题主扩散一下问题,看看能不能得到合理的解释。

    reply
    0
  • Cancelreply