如何給你的json物件的某個方法,然後用這個物件的屬性輸出結果?
阿新 • • 發佈:2018-12-31
最近做多語言切換功能時遇到一個問題,傳送驗證碼後倒計時文字的問題。
這個驗證碼倒計時提示是需要傳遞倒計時時間引數的,因此就不能像簡單的文字替換寫個對映就簡單解決,當然也是基於對映關係的,但是要麻煩一些。由於是自己測試出來的,成功之後就感覺像是發現了新大陸!!!(媽的,原來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",
},
}