如何停止通过引用传递

how can i stop pass by reference?

本文关键字:引用 何停止      更新时间:2023-09-26

我在通过引用或值传递时遇到问题。

我知道人们可能会认为这是一个重复的帖子,但我没有找到解决这个问题的方法。

我有这样的东西:

//<div data-content="{bigObject}" id="SomeId"></div>
   // Originally bigObject was something like:
bigObject = {
    place : 'home',
    time : ''
};
$('#SomeId').click(function(){
    $(this).someFunction();
});
(function($){
    $.fn.someFunction = function(){
        var m = {
            obj : this,
            bigObject : '',
            initialize : function(){
                m.bigObject = m.obj.data('content');
                m.manipulateObject();
            },
            manipulateObject : function(){
                m.bigObject.place = 'work';
            }
        }
        m.initialize();
        return m.obj;
    }
})(jQuery);

问题是当我单击SomeId时,大对象在div的data('content')和函数m.bigObject.place中都发生了变化

有没有办法不改变它们?

您可以创建对象的新副本并使用它。你可以使用 jquery.extend 来实现这一点。

var newObject = $.extend({}, m.bigObject);

而不是做

manipulateObject : function(){
    m.bigObject.place = 'work';
}

你可以做:

manipulateObject : function(object){
    object.place = 'work';
}