【问题标题】:how can i stop pass by reference?我怎样才能停止通过引用传递?
【发布时间】:2013-11-30 17:26:16
【问题描述】:

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

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

我有类似的东西:

//<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 中的大对象都发生了变化

有没有办法不同时改变它们?

【问题讨论】:

  • 只是将对象存储在其他地方?
  • 喜欢在哪里?无论我将它存储在哪里,它似乎都是如此。它一直通过参考..
  • 哦,我明白了,你需要做var newObject = jQuery.extend({}, oldObject);
  • 我试图通过引用而不是通过引用传递它我尝试做 bigObject.clone() 并且它抛出并出错
  • 您无法克隆对象,但可以使用 $.extend 创建包含完全相同数据的新对象。

标签: javascript jquery pass-by-reference


【解决方案1】:

您可以创建对象的新副本并使用它。你可以使用jquery.extend

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

而不是做

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

你可以这样做:

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

【讨论】:

  • 不,我要做的只是代替m.bigObject = m.obj.data('content');,我将克隆对象然后使用它。
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 2020-10-26
  • 2018-11-25
  • 2011-09-06
  • 2020-06-20
  • 2011-12-05
  • 1970-01-01
相关资源
最近更新 更多