JS前端开发联盟群JavaScript

[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
上一篇下一篇

猜你喜欢

热点阅读