【发布时间】:2016-08-10 00:20:26
【问题描述】:
我在为数据表构建排序按钮时遇到了这个问题。我想让每个排序按钮在 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>
【问题讨论】:
-
这是因为在 JavaScript 中对象是通过引用分配的,即它们在分配时不会被复制。据我所知,这是流行编程语言中非常常见的行为。
标签: javascript object assignment-operator