下面首先记录0,然后记录1.如何存储对象的副本,而不是对它的引用?
debug.log(vi.details.segment);
vi.nextSegment = vi.details;
vi.nextSegment.segment++;
debug.log(vi.details.segment);
答案 0 :(得分:127)
在jQuery中克隆一个对象:
var vi.nextSegment = jQuery.extend({}, vi.details);
注意:上面是浅层副本:任何嵌套对象或数组都将通过引用进行复制 - 这意味着您对vi.nextSegment.obj[prop]
所做的任何更改都将反映在vi.details.obj[prop]
中。如果您想要一个完全独立于原始的全新对象,则需要进行深层复制(将true
作为第一个参数传递):
var vi.nextSegment = jQuery.extend(true, {}, vi.details);
要详细了解延伸,请参阅here.
答案 1 :(得分:30)
查看帖子:What is the most efficient way to clone a javascript object
根据John Resig's回答:
// Shallow copy
var newObject = jQuery.extend({}, oldObject);
// Deep copy
var newObject = jQuery.extend(true, {}, oldObject);
中找到更多信息
答案 2 :(得分:8)
这对我使用jQuery“parseJSON()”和“JSON.stringify()”克隆对象更有效。
$.ajax({
url: 'ajax/test.html',
dataType: 'json',
success: function(data) {
var objY = $.parseJSON(JSON.stringify(data));
var objX = $.parseJSON(JSON.stringify(data));
}
});
在objX&中克隆数据对象objY是两个不同的对象,你不必搞乱“引用”问题
格拉西亚斯!
答案 3 :(得分:6)
克隆对象的另一种方法是
newObj = JSON.parse(JSON.stringify(oldObj));
但如果它包含日期,请小心。在这种情况下,JSON.parse将返回date.toString()而不是date。
答案 4 :(得分:3)
这是我多次复制元素的方式:
首先我有一个模板:
<div class="forms-container">
<div class="form-template">
First Name <input>
.. a lot of other data ...
Last Name <input>
<div>
<button onclick="add_another();">Add another!</button>
<div>
现在,JavaScript:
function add_another(){
jQuery(".form-template").clone().appendTo(".forms-container");
}
答案 5 :(得分:2)
Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
Using conn As New SqlConnection, comm As New SqlCommand 'etc...
Try
conn.Open()
comm.CommandText = "SELECT * FROM..."
'Set dgv1 DataSource...
Catch ex As Exception
DisplayExceptionMessageBox(ex)
End Try
End Using
End Sub
Private Sub dgv1_SelectionChanged(sender As Object, e As EventArgs) Handles dgv1.SelectionChanged
dgv2.DataSource = Nothing
If dgv1.CurrentRow Is Nothing Then
Exit Sub
Else
'SELECT * FROM... WHERE id = dgv1.CurrentRow.Cells(0).Value
'Bind to dgv2
End If
End Sub
:由于Immutable.js
主要处理jQuery
,因此可能不适合作业。 DOM Elements
是由Immutable.js
创建的56 kb (minified)
库。
Facebook
这样您就可以从// roughly implementing
import Immutable from 'immutable'
//
const oldObj = { foo: 'bar', bar: 'baz' }
// create a map from the oldObj and then convert it to JS Object
const newObj = Immutable.Map(oldObj).toJS()
有效地克隆newObj
。基本上,如果您还没有oldObj
,那么我们需要先创建Map
。地图就像Map
我们合作创建blue-print
。
主页 - Immutable
文档 - Immutable Docs
GitHub - Immutable@GitHub
祝你好运。
答案 6 :(得分:0)
如果您需要保留初始对象,但需要使用新选项覆盖数据,则可以将多个对象传递给$ .extend(jQuery),并且第一个选项为true
vi..