1. 程式人生 > >如何給你的json物件的某個方法,然後用這個物件的屬性輸出結果?

如何給你的json物件的某個方法,然後用這個物件的屬性輸出結果?

最近做多語言切換功能時遇到一個問題,傳送驗證碼後倒計時文字的問題。

這個驗證碼倒計時提示是需要傳遞倒計時時間引數的,因此就不能像簡單的文字替換寫個對映就簡單解決,當然也是基於對映關係的,但是要麻煩一些。由於是自己測試出來的,成功之後就感覺像是發現了新大陸!!!(媽的,原來json物件還能這麼玩兒)

不廢話了,上程式碼、效果圖!

程式碼:下面這段程式碼是處理多語言對映關係的一個js,寫在一個粗糙的物件中,頁面只需要呼叫TRANS方法並傳遞必要引數即可返回對應的語言。主要的操作就在langFormMap.TRANS這個方法屬性中了。在最後一個else分支裡,出現了兩次變數賦值,為啥是兩次?因為我試過一次失敗了,形如:var val = this[type][word(param)],這麼操作我覺得理所當然啊!然而並不行。

因此,先將word對映到的那個帶參函式賦值給一個變數,然後再通過操作這個變數間接為原函式傳值,通過這樣兩步驟終於是拿到想要的東西了

let langFormMap = {
    params:"",
    TRANS:function (type,word,param) {
        console.log(type,word,param)
        if (!this[type]){
            console.log('no lang type')
            return word;
        }else{
            if(typeof(param) == "undefined"){
                return this[type][word]||word;
            }else{
                // this.params = param;
                var fun = this[type][word]
                var val = fun(param)
                return val;
} } }, "en": { "登入": "Login", "密碼": "password", "確認密碼": "repassword", "賬號登入": "User Login", "註冊新賬號": "New Account", "手機號": "cellphone", "驗證碼": "verification code", "獲取驗證碼": "get verification code", "countdown"(param){ return "after ("+param+")s latter" }
}, "jp": { "登入": "登録", }, "fr": { "你好": "Bonjour", "熱愛": "Aimer", }, }