Javascript对象分配gottcha
Javascript Object Assignment gottcha
我在为数据表构建排序按钮时遇到了这个问题。我想让每个排序按钮在DESC(向下排序)和ASC(向上排序)以及非活动(默认排序)之间切换
所以我创建了两个模型,一个是随着程序的进展而改变的模型,另一个是重置值的默认模型
var model = {
order: {
field: 'creationDate',
direction: 'DESC'
},
orderDefault: {
field: 'creationDate',
direction: 'DESC'
}
}
$('button').click(function() {
if (model.order.field == "creationDate") {
model.order.field = 'newField'
} else if (model.order.direction == 'DESC') {
model.order.direction = 'ASC'
} else {
// This casuses the orderDefault object to be a clone of the order object
// so assignment of values in model.order are refelected in model.orderDefault GOTCHA!!!!
model.order = model.orderDefault
}
$('#result').html('field:' + model.order.field + " direction:" + model.order.direction);
}
)
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<button class="btn btn-primary">
click me
</button>
<div id="result">
</div>
因此,您将看到,在我们重置订单对象之前,一切都按预期进行。当我们在代码中第二次到达这一点时,您将看到它从未重置。orderDefault obj似乎变成了order obj的别名。
答案是,您需要分配orderDefault 的值,而不是分配orderDefault
所以不是
model.order = model.orderDefault
但是
model.order.direction = model.orderDefault.direction
model.order.field = model.orderDefault.field
我希望这能帮助到别人。
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在循环中分配json值时,值被覆盖
- 动态分配GA增强型电子商务跟踪器
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 如何在jQuery中将函数的输出分配给变量
- 为集合分配大量的模型弹药
- onclick函数需要双击,因为类分配延迟
- Javascript 将变量分配给警报
- 将节点数据分配给另一个变量jstree
- 如何发送分配列表<字符串>到JavaScript数组或可枚举对象
- Javascript变量分配-按类别
- 如何将内容分配给元素
- 为变量分配多个nodejs导出返回值时出现问题
- Jslint 错误:需要条件表达式,而是看到分配
- 为什么可以't我将检索到的文档分配给控制台中的变量
- 将数组的拼接分配给自身时,Javascript控制台打印不起作用
- 为什么当CRLF被分配到<输入>使用php
- 在Javascript中重新分配对象变量时,原始对象会发生什么
- 为什么可以't我跳过函数签名中的参数分配
- Javascript对象分配gottcha