去年底就草草了了的翻过《JavaScript Web Application》这本书,当时就遇到好几个地方没怎么看明白,当时也没有去深究,就只是简单的过一遍这本书。由于此前JavaScript方面的知识匮乏,所以把这本书就缓在阅读队列里了,最近才轮到。其间读了好几本基础和进阶的书,所以这次读这本书,很多之前不明白的地方就豁然明了了。不过好记性不如烂笔头,没准下次忘记了呢。
记得此前书中对ES5 bind()方法的实现就是一个让我感到迷糊的地方(中文版P16):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
if (!Function.prototype.bind) { Function.prototype.bind = function(context){ var slice = [].slice , args = slice.call(arguments, 1) , self = this , nop = function(){} // ① `nop`(函数)的作用? , bound = function(){ // ② 为什么要做`instanceof`判断? return self.apply(thisinstanceof nop ? this : (context || {}), args.concat(slice.call(arguments))); };
// ③ 为什么要设置它俩的原型? nop.prototype = self.prototype; bound.prototype = new nop();