Я стараюсь приводить разное количество аргументов в разных случаях. У меня такой код:
function getByteCode(tokenData, incomeData){
incomeData.volume = Number(incomeData.volume) * Math.pow(10,tokenData.decimals);
incomeData.volume = incomeData.volume.noExponents();
let web3 = new Web3();
let instanceContract = new web3.eth.Contract(abi);
instanceContract.options.address = tokenData.address;
let necessaryMethod = instanceContract.methods[incomeData.methodCall];
let methodCall = necessaryMethod(incomeData.destination_address, incomeData.volume);
return methodCall.encodeABI();
} catch (err) {
sails.log(err);
return {
state: 'fail',
message: 'There is error in creation byte code \n' + err
}
}
}
В необходимый метод я хочу передать два аргумента в одном случае и передать три или более аргумента в другом случае. Как я могу это сделать? Может стоит использовать "аргументы", но не понимаю как?
Из кода неясно, что это за «один случай» и «другой случай».
@Pointy не нужно использовать .apply, оператор спреда добьется того же и будет более четким. requiredMethod (... массив)
@sofcal Я олдскульный :) Тоже ...
не оператор.
Хорошо, спасибо за помощь. Я использовал метод .apply ()
let web3 = new Web3();
let instanceContract = new web3.eth.Contract(abi);
instanceContract.options.address = tokenData.address;
let necessaryMethod = instanceContract.methods[incomeData.methodCall];
let methodCall = necessaryMethod.apply(this, incomeData.argumentsForFunction);
return methodCall.encodeABI();
В первом случае я вызвал функцию getByteCode (firstObj, доходДанные), и следующий массив есть в yieldData.argumentsForFunction = ['0x323 .....', '1500000000'].
В другом случае я вызвал функцию getByteCode (firstObj, доходДанные) с yieldData.argumentsForFunction = ['0x323 .....', '0x3228 ....', '54454000000']
Вы можете поместить аргументы в массив, а затем использовать
.apply()