- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚刚开始使用 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: };
我只是初学者,但如果你能教我,那你就太棒了。我了解原型(prototype)、调用、转移、应用,这样您就可以跳过初学者部分(尽管我认为您不应该这样,其他几乎没有接触 JS 的人可能会学习如何)。
注意:我知道有一些“相似的代码”在问相似的问题here但我要逐行解释,它们不是(不重复)(另外,您可以跳过第 8 和第 9 行):)
最佳答案
这是 EcmaScript 5 的 EcmaScript 3 的部分实现 bind
方法 partial application .它使
myObject.method.bind(myObject, 1, 2)(3, 4)
相当于
myObject.method(1, 2, 3, 4)
但它也更方便,因为你可以这样做
var m = myObject.method.bind(myObject, 1, 2);
m(3, 4);
m(5, 6);
代替
myObject.method(1, 2, 3, 4);
myObject.method(1, 2, 5, 6);
Nit:两者并不完全等同,因为如果第一次调用 myObject.method
执行 this.method = somethingElse;
那么绑定(bind)的方法仍然会调用原创。
分解:
Function.prototype.bind = function(){
向内置函数类型添加方法。
var fn = this,
存储this
,它在正常使用中应该是一个Function
,这样它就可以在闭包中使用。
args = Array.prototype.slice.call(arguments),
创建一个数组,其中包含bind
的参数。
object = args.shift();
从 args
中删除第一个参数并将其存储在 object
中。稍后应用时,这将用作 fn
的 this
值。
return function(){
返回一个作为部分应用方法的函数。调用时这个函数
return fn.apply(object,
调用 .bind
左侧的函数,将第一个参数作为 this
传递给 bind
。apply
是一种特殊的函数反射方法,它允许使用类似于 python 中的 *args
或 **kwargs
的参数数组调用函数, 或 Java 中的 ...
。
args.concat(Array.prototype.slice.call(arguments)));
作为参数传递给 fn
,bind
的参数后跟闭包的参数。
关于javascript - 有哪位天才能告诉我这段小代码是怎么回事吗?来自 JavaScript 忍者的 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174112/
我将 Ninject 与 ASP.NET MVC 4 一起使用。我正在使用存储库并希望进行构造函数注入(inject)以将存储库传递给其中一个 Controller 。 这是我的存储库界面: publ
在我们的 MVC 项目中,我们广泛使用 Ninject。由于未知原因,StandardKernel 开始抛出 NotSupportedException 并显示消息“不支持具有 null 或空名称的模
我正在逐字逐句地遵循 Yocto Project 2.4.2 快速入门指南,但当我尝试为 Intel MinnowBoard 构建时它失败了。我正在 Virtual Box 中的 Ubuntu 16.
我正在使用 VS 2017 的新“打开文件夹”功能,通过 CmakeSettings.json 自动构建 cmake。 代码是用C11写的,所以我需要用gcc(来自mingw-64)编译。我创建了一个
您可以将 Ninject 2.0 与 VS2010 RC1 一起使用吗? 最佳答案 我有类似的问题...尝试针对完整的 .NET 4 框架,而不是客户端配置文件。 据我了解 System.Web 在
我通过以下方式获得源代码(chrome) $ glient sync 运行所有命令请求: - gclient config ...... - GYP_GENERATORS ... -
在我们的作业中发现 here我们正在创建一款名为“牛仔、忍者、熊”的游戏,本质上是“石头、剪子、布”。所以我有两个问题。 1.) 如何将 c、n 或 b 分配给程序生成的随机数 1、2 或 3? 2.
我正在努力思考第 57 页上 Javascript ninja 中的一些代码。 function forEach(list, callback) { for (var n = 0; n < l
我刚刚从 NuGet 安装了新的 Ninject.MVC3 并试图让它在我的 asp.net mvc 3 应用程序中工作,但是我在浏览我的网站时不时收到这个奇怪的错误: [InvalidOperati
我想创建带有一点自定义辐条的饼图。 我想要实现的是在辐条上方显示名称 od 数据点,在辐条下方显示值。现在我知道如何用 func sChart(_ chart: ShinobiChart, label
尝试按照 ubuntu 16.04 x64 上的 android 文档从 aosp 构建 android,jdk 和工具链安装完成,但构建在几分钟后停止。这是构建日志: e@ubuntu:/e/aos
我一直在使用 Bob Cravens 博客中描述的存储库模式来创建我的应用程序,但我有点新,仍然在寻找解决方法。我想将我的 DataService 对象注入(inject)到我的 ViewModel
我是一名优秀的程序员,十分优秀!