【发布时间】:2016-04-13 13:02:58
【问题描述】:
您好,我正在查看 hapijs 框架的核心代码,我注意到了这一点。
Plugin.call(this, this, [], '', null);
我不知道他们为什么要传递两个 this 和 [], '', null 以及它应该做什么。
【问题讨论】:
标签: javascript hapijs
您好,我正在查看 hapijs 框架的核心代码,我注意到了这一点。
Plugin.call(this, this, [], '', null);
我不知道他们为什么要传递两个 this 和 [], '', null 以及它应该做什么。
【问题讨论】:
标签: javascript hapijs
查看此文件:https://github.com/hapijs/hapi/blob/master/lib/plugin.js#L21
如前所述,第一个 this 正在传递上下文:fun.call(thisArg[, arg1[, arg2[, ...]]])
给定函数的参数列表(server, connections, env, parent),最终的参数调用将是:
server: this
connections: []
env: ''
parent: null
另外,请在此处阅读.call():http://mzl.la/18EkRLg
【讨论】:
.call 和 .apply 用于运行具有不同上下文 this 的函数,并允许您以不同方式传递参数。
两者都接收this 上下文作为第一个参数。
call 将剩余的参数作为逗号分隔的参数列表。
Plugin.call(this, this, [], '', null);
apply 将一个数组或类似数组的参数对象传递给被调用的函数。
Plugin.apply(this, [this, [], '', null]);
该代码范围内的某处将是一个名为Plugin的函数
有很多关于 call 和 apply 的文档,因为它可能有点难以理解,但一旦你知道如何以及为什么使用它,你就会开始在任何地方使用它。
【讨论】: