JavaScript with语句简单使用

JavaScript中的with用于扩展一个语句的作用域链,这个跟Python里的with不太一样。

Python里的with主要是用来分解try…finally语法,用于处理一些I/O句柄的释放问题。而JS中的with则是为了扩展作用链,省略父级名称空间。

下面是一个简单例子:

class MyName extends String {
  constructor(fullname) {
    super(fullname);
  }
}

const myName = new MyName('YanWen');

with (myName) {
  console.log(`my name: ${toString()}`);
  console.log(`length: ${length}`);
  console.log(`firstname: ${slice(3, 6)}`);
  console.log(`lastname: ${slice(0, 3)}`);
  // console.log(this);  // -> window, not myName
}

输出结果:

"my name: YanWen"
"length: 6"
"firstname: Wen"
"lastname: Yan"

with的应用场合不是很广,Mozilla官方也不推荐使用。因为其兼容性不好,容易混淆某些变量,详见MDN

不过在某些极端情况还是有用的,比如需要大量使用某对象的属性和方法时,这时候就可以省略很多指明作用域的代码(即对象名)。

参考:

  1. MDN – JavaScript with
  2. Python.org – PEP 343

 

作者: YanWen

Web 开发者

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s