Javascript
動態呼叫合約上的函式
我正在嘗試使用單個函式呼叫契約的不同函式,該函式將函式名稱作為參數傳遞給它。
var Web3 = require('web3'); const web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io')); var myContract = new web3.eth.Contract(JSON.parse(data.abi), data.address); var method = data.method // 'getWord' myContract.methods.getWord().call().then(function(value) { console.log(value) }, function(error) { console.log(error) });
上面我創建了一個名為 method 的變數,它的值已設置為
getWord
我正在呼叫的下面的行getWord()
我想要做的是呼叫 data.method 中命名的任何函式……
myContract.methods.[data.method].call().then(function(value) { console.log(value) }, function(error) { console.log(error) });
但當然它會中斷,我更喜歡不
eval()
這樣使用var myContract = new web3.eth.Contract(JSON.parse(data.abi), data.address); eval('myContract.methods.'+data.method+'().call()') .then(function(value) { console.log(value) }, function(error) { console.log(error) });
還有其他方法嗎?
它應該只是:
myContract.methods[data.method]().call()
(你在那裡有一個額外的點。)