JavaScript - template tag function
in JS on 공부, Javascript
const tag = function(strs, arg1, arg2){
return {strs: strs, args: [arg1, arg2]}
}
const res = tag `순서가 ${1}이렇게 ${2}`
strs : [“순서가 “, “이렇게 “, “”]
args : [1, 2]
tag 함수는 tag 함수 이름을 적고 뒤에 template literal을 적어주면 첫번째 인자에는 순수한 문자열의 배열을 넣어주고
string interpolation에 있는 값들을 인자로 넘긴다.
무조건 문자열이 interpolation보다 한 개 더 많아야 한다.
그래서 interpolation이 많아지면 그냥 알아서 문자열 배열에 있는 ““의 수를 얘네가 추가로 늘려준다.
const createCollection = {
Map(keys, ...vals){
const m = new Map()
vals.forEach((val, i)=>{
m.set(keys[i].trim(), val)
})
return m
},
wMap(keys, ...vals){
const wm = new WeakMap()
for(let i = 0; i < vals.length; i+=2){
wm.set(vals[i], vals[i+1])
}
return wm
},
}
const wkeys = [{a : 100}, {b : 200}]
const map = createCollection.Map `
a ${10}
b ${`what`}
fn ${v=>v+10}
`
console.log(map)
Map{"a"=>10, "b"=>"what", "fn"=>f}
가된다.