[JavaScript] new Function和with
2016-03-07 本文已影响51人
何幻
(1)with的作用:
改变标识符的查找优先级,优先从with指定对象的属性中查找。
例:单独的标识符
var a=1;
varobj={
a:2
};
with(obj){
console.log(a);//2
}
例:级联属性
var a={
v:1
};
varobj={
a:{
v:2
}
};
with(obj){
console.log(a.v); //2
}
(2)new Function的作用:
使用字符串,在最外层词法作用域,创建一个函数。
例:
var a=1;
function f(){
var a=2;
var g=new Function('alert(a);'); //1
g();
}
f();
例:
var a=1;
function f(){
var a=2;
var g=new Function('function h(){alert(a);};h();'); //1
g();
}
f();
(3)new Function+with
varfn=new Function('obj','with(obj){return prop.value;}');
var data={
prop:{
value:1
}
};
fn(data); //1
相比data['propName']
而言,
<u></u>new Function
+with
可以直接访问data
的级联属性。
因此,常用JavaScript模板引擎中。
functionevalPropChain(data,propChainStr){
return new Function('obj','with(obj){return '+propChainStr+';}')(data);
}
var data={
prop:{
value:1
}
};
evalPropChain(data,'prop.value'); //1