我几乎没有启动
JavaScript,我想知道有没有任何天才可以帮助我逐行了解?
1: Function.prototype.bind = function(){ 2: var fn = this,3: args = Array.prototype.slice.call(arguments),4: object = args.shift(); 5: return function(){ 6: return fn.apply(object,7: args.concat(Array.prototype.slice.call(arguments))); 8: }; 9: };
我只是初学者,但是如果你能教我,那么你真的很棒.我知道原型,调用,转移,应用一些,以便您可以跳过初学者部分(虽然我认为你不应该那么其他刚刚进入JS可能会学习如何).
注意:我知道有一个“类似的代码”,问一个类似的问题here,但我问逐行解释,他们不是(不重复)(也可以跳过第8行和第9行):)
解决方法
这是在EcmaScript 3中的一个部分实现,它是
partial application的EcmaScript 5
bind
方法
myObject.method.bind(myObject,1,2)(3,4)
相当于
myObject.method(1,2,3,4)
但它也更方便,因为你可以做
var m = myObject.method.bind(myObject,2); m(3,4); m(5,6);
代替
myObject.method(1,4); myObject.method(1,5,6);
Nit:这两个并不完全相同,因为如果第一次调用myObject.method,那么this.method = somethingElse;那么绑定的方法仍然会调用原来的方法.
打破它:
06004
06005
存储它应该是正常使用中的函数,以便它可以在封闭中使用.
06006
创建一个包含要绑定的参数的数组.
06007
从args中删除第一个参数并将其存储在对象中.这将被用作fn的值,稍后应用.
06008
06009
将.bind左边的函数调用传递第一个参数来绑定.
apply是一种特殊的函数反映方法,它允许使用类似于python中的* args或** kwargs的参数数组来调用函数,或者在Java中调用.
060010
作为参数传递给fn,bind的参数后跟参数到闭包.