자바스크립트 질문입니다…
eval을 사용해서 어떤 표현식을 실행할건데,
이 eval이 실행될때, 특정 객체를 스코프로 사용했으면 합니다.
어떻게 해야할까요…?
let context = {
foo: true,
bar: {
a: 2,
}
// 이런식으로 여러종류의 변수들이 들어있음
};
function callTextAsFunction(x) {
'use strict'
try {
/** 약간 이런 식...?
let { * } = context;
*/
return eval(x); // 이 eval(x) 는 context 객체의 내용을 스코프로 사용
} catch (e) {
console.error(e);
}
};
callTextAsFunction('bar.a === 42');
이런식으로 작동했으면 좋겠습니다…
왜 저렇게 하려고 하는건지 알려주실 수 있나요?
앞에 this.을 붙혀야 하겠지만 bind로 context를 this로 묶으면 될거 같습니다.
let context = {
foo: true,
bar: {
a: 2,
}
// 이런식으로 여러종류의 변수들이 들어있음
};
function callTextAsFunction(x) {
'use strict'
try {
/** 약간 이런 식...?
let { * } = context;
*/
return eval(x); // 이 eval(x) 는 context 객체의 내용을 스코프로 사용
} catch (e) {
console.error(e);
}
};
const bindFunction = callTextAsFunction.bind(context)
let res = bindFunction('this.bar.a === 32')
그러나 저 역시도 왜 이렇게 써야 하나 싶습니다.
1개의 좋아요
how
5
use strict 를 제거하면 될것 같습니다.
원래 eval 이 스코프를 수정하는데 use strict 를 붙히면 스코프를 수정하지 않습니다.