任何天才能告诉我这个小代码是怎么回事?从JavaScript忍者的秘密

我几乎没有启动 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的参数后跟参数到闭包.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...