美文网首页JS前端开发联盟群JavaScript
[JavaScript] new Function和with

[JavaScript] new Function和with

作者: 何幻 | 来源:发表于2016-03-07 07:18 被阅读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
    

    相关文章

      网友评论

        本文标题:[JavaScript] new Function和with

        本文链接:https://www.haomeiwen.com/subject/rzlnkttx.html