JavaScript的with 语句的使用方法

2019-11-05 09:46:16来源:爱站网 阅读 ()

新老客户大回馈,云服务器低至5折

我们应该对Java都是很熟悉的,其实它的简单性和可读性得到了保证,下面就让爱站技术频道小编带大家一起来学习JavaScript的with 语句的使用方法吧,希望对你有帮助。

如:

?

apple.banana.candy.dog.egg.fog.god.huh.index = 0;
doSomething(apple.banana.candy.dog.egg.fog.god.huh.index);


利用 with 语句, 可以写为以下代码.

?

?

?


with(apple.banana.candy.dog.egg.fog.god.huh) {
c = 0;
doSomething(index);
}


看起来很美妙, 却存在致命的缺陷. 下面我们来进行一些小测试吧.

1. 在 with 语句内部通过内部变量修改数值

?

?

?


var root = {
branch: {
node: 1
}
};

with(root.branch) {
node = 0;
// 显示 0, 正确!
alert(node);
}
// 显示 0, 正确!
alert(root.branch.node);


2. 在 with 语句内部通过对象节点修改数值

?

?

?


var root = {
branch: {
node: 1
}
};

with(root.branch) {
root.branch.node = 0;
// 显示 0, 正确!
alert(node);
}
// 显示 0, 正确!
alert(root.branch.node);


经过测试 1 和测试 2, 乍看没什么问题, 但是... 请看测试 3.

3. 在 with 语句内部通过对象父节点修改数值

?

?

?


var root = {
branch: {
node: 1
}
};

with(root.branch) {
root.branch = {
node: 0
};
// 显示 1, 错误!
alert(node);
}
// 显示 0, 正确!
alert(root.branch.node);


由上面的测试 3 可知, with 语句内部的节点父节点修改后, 不会同步到节点本身. 也就是说, 不能保证内外数值的一致性. 这是可能成为项目里面隐藏性很高的 bug.
那我们该怎么办呢? 接受那很长的一串逐级访问, 还是另有他法?

方法是有的. 我们可以通过别名引用父节点的方式来调用节点对象, 如:

?

?

?


var root = {
branch: {
node: 1
}
};

var quote = root.branch;
quote.node = 0;
// 显示 0, 正确!
alert(root.branch.node);

上文是爱站技术频道小编带给大家的JavaScript的with 语句的使用方法,我相信很少有人会使用WITH语句,很多人不会知道这个功能,其实有都很好我们根本用不上它。


原文链接:https://js.aizhan.com/develop/JavaScript/9926.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:总结jQuery 常见操作实现方式和常用函数方法

下一篇:JavaScript中为元素加上name属性的方法