【发布时间】:2017-02-17 06:22:02
【问题描述】:
我在一个文件夹中有两个文件 - index.js 和 util.js,它们的代码库如下
Util.js
let obj = {}
obj.sendTransaction = () => {
console.log(arguments);
return new Promise((resolve, reject) => {
// try {
// let data = ethFunction.call()
// resolve(data)
// } catch (e) {
// reject(e)
// }
});
}
module.exports = obj
在Index.js 中,如果我将参数传递给addNewParticipant 或其变体,那么它们不会出现在util.js 的参数对象中,例如
const addNewParticipant = (foo, bar) => {
var ethFunction = myContract.addParticipant.sendTransaction
console.log(ethFunction);
EthUtil.sendTransaction()
}
const addNewParticipantTwo = (foo, bar) => {
var ethFunction = myContract.addParticipant.sendTransaction
console.log(ethFunction);
EthUtil.sendTransaction(ethFunction, foo, bar)
}
并将其称为 addNewParticpant(1, 2) 和 addNewParticpantNew(1, 2),数字 1 和 2 不会出现在 util 函数的 arguments 对象中。事实上,arguments 对象保持不变,4 个输入描述了 node_modules 中的一些函数和文件,包括 Bluebird 和对 index.js 本身的引用
我的最终目标是
将函数从
index.js传递给util.js传递未知数量的变量
调用传递的函数并对其应用未知数量的变量
将整个事情包装在一个承诺中并进行一些数据验证
理想情况下,arguments[0] 代表我将传递的一个函数,另一个是值。然后我会使用
var result = arguments[0].apply(null, Array().slice.call(arguments, 1));
如果有帮助,我要传递的函数有一个可选的回调功能
【问题讨论】:
-
胖箭头没有自己的
this或arguments对象。如果你想要这些,你将不得不使用“常规函数”。或者你使用rest parameterobj.sendTransaction = (fn, ...args) => { console.log(fn, args) } -
请停止垃圾标签,这个问题与nodejs,prototype或prototypejs无关
标签: javascript node.js prototype apply