Solidity
需要幫助理解“Metamask 提供的模板程式碼,用於我們如何檢測使用者是否安裝了 Metamask”?
我正在學習第 6 課。2 Cryptozombies(標題:Web3 Providers),它向我展示了這一點:
“這是 Metamask 提供的一些模板程式碼,用於我們如何檢測使用者是否安裝了 Metamask,如果沒有,告訴他們他們需要安裝它才能使用我們的應用程序:”
window.addEventListener('load', function() { // Checking if Web3 has been injected by the browser (Mist/MetaMask) if (typeof web3 !== 'undefined') { // Use Mist/MetaMask's provider web3js = new Web3(web3.currentProvider); } else { // Handle the case where the user doesn't have web3. Probably // show them a message telling them to install Metamask in // order to use our app. } // Now you can start your app & access web3js freely: startApp() })
我不明白語句“if”和“else”之間發生了什麼。
if (typeof web3 !== 'undefined')
如果我是正確的,我認為上面的這部分檢查對象“web3”是否不是“未定義”。
web3js = new Web3(web3.currentProvider);
上面這個我真的很不確定。
我的理解:
→ 正在使用對象建構子“Web3()”創建一個新對象。
→ 然後將其分配給變數“web3js”。
→ ‘web3’ 是 Metamask 將其 web3 提供程序注入的全域 Javascript 對象(它是 infura 的提供程序/伺服器之一)。
我需要幫助:
→ 我需要解釋一下建構子“Web3()”究竟做了什麼,或者我可以在哪裡找到有關它的更多詳細資訊。我好像找不到!
→ 我不完全理解在建構子中輸入的參數“web3.currentProvider”。我知道它指的是 Metamask 使用的 web3 提供程序,但我只知道這一點,因為它在課程中說過。我在哪裡可以驗證這一點?
Web3()
建構子通過完整節點或公共節點提供程序(infura)建立與特定網路(主網,ropsten,…)的連接,或者像這裡一樣通過元遮罩注入到您的全域window
對象的提供程序建立連接