javascript - FastClick源码的一个小问题?
怪我咯
怪我咯 2017-04-11 10:58:02
0
2
321

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

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

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信(2)
左手右手慢动作

应该是不确认调用方的调用方式,简单来说,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上了
いいねを押す +0
刘奇

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!