1. 程式人生 > 遊戲 >《堡壘之夜》第三章第三季新增零建造模式

《堡壘之夜》第三章第三季新增零建造模式

目錄

簡介

!function (allModule) {
    function useModule(whichModule) {
        allModule[whichModule].call(null, "hello world!");
    }
    useModule(0)
}([
    function module0(param) {console.log("module0: " + param)},
    function module1(param) {console.log("module1: " + param)},
    function module2(param) {console.log("module2: " + param)},
]);

執行以上程式碼,會輸出 module0: hello world!,相信通過淺顯易懂的變數名和函式名,應該就可以看懂大致含義了,呼叫 useModule(0),從所有函式裡選擇第一個,將 hello world! 傳遞給 module0 並輸出。

仔細觀察以上程式碼,我們會發現主要用到了 !function(){}()function.call() 語法

Function.prototype.call() / apply() / bind()

Function.prototype.call()Function.prototype.apply()Function.prototype.bind()

都是比較常用的方法。它們的作用一模一樣,即改變函式中的 this 指向,它們的區別如下:

  • call() 方法會立即執行這個函式,接受一個多個引數,引數之間用逗號隔開;
  • apply() 方法會立即執行這個函式,接受一個包含多個引數的陣列;
  • bind() 方法不會立即執行這個函式,返回的是一個修改過後的函式,便於稍後呼叫,接受的引數和 call() 一樣。

解密方式

先找到加密位置,根據加密位置定位載入器,它一般是一個自執行函式

把載入器部分程式碼複製下來

可以列印載入器所需的函式

將目標函式放進來後我們就開始補其他函式