js 中使用 use strict 时, 如何替代 with

网上查找这个会发现一些文章,源头不清楚,内容都是 使用正则表达式替换变量的思路。

比如:https://www.jb51.net/article/100960.htm

由于不是语法分析,所内部的以字符串也会被替换。同时,如果有同名的内部变量,作用域也会改变。

这里使用一种新的思路来进行替代。代码使用ES6的特性,ES5 也可以参照同样的思路写一个转换函数。

思路如下:

比如:一个简单的函数

var data = {a:1, b:2}

function test(data){

with(data) { console.log(a, b);}

}

test();

输出: 1    2

如果去掉 with, 实际上function 变成了

var data = {a:1, b:2}

function test(data){

var a = data.a, b=data.b;

console.log(a, b);

}

要将函数的本体进行转换,使用ES6 的 变量的解构赋值 特性,可以这样做:

var data = {a: 1, b:2};
var args = Object.keys(data);  //枚举key
var a = `
    console.log(data);
    var { ${args} } = $data; 
    console.log(a, b);
    a=3;b=4; 
    Object.assign(data, { ${args} });
    console.log(data)`;  //函数体的字符串
var f = new Function("$data", a);  //创建函数
f(data);  执行函数

实际使用中,还要加上 try/finally。

一般结构是:

var { 变量} = 参数;

try{ ......}

finally {

   Object.assign(对象参数, {变量})

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值