Странная работа $.extend
Почему-то $.extend не может поменять данные в объекте, хотя обычным присваиванием все меняется. В чем может быть дело?
$('#item').data('options',{opt1:'a'})
newoptions = {opt1:'b', opt2:'b'}
$.extend(true, $('#item').data().options, newoptions)
console.log($('#item').data('options')) //{opt1:'a'}
$item.data().options = 'abc'
console.log($('#item').data('options'))// 'abc'
|
Потому, что $.extend возвращает новый объединённый объект. А у тебя он возвращает его в никуда.
|
И что? Он должен изменять первый объект, см. пример 2 http://api.jquery.com/jQuery.extend/
|
Shitbox2,
Какая версия jquery ? Проверил на jquery 1.8.2 в Firefox - все ок.
$('#item').data('options',{opt1:'a'});
newoptions = {opt1:'b', opt2:'b'};
$.extend(true, $('#item').data().options, newoptions);
console.log($('#item').data('options')); // {opt1: 'b', opt2: 'b'}
$('#item').data().options = 'abc';
console.log($('#item').data('options'));// 'abc'
|
Цитата:
да, копируется в объект, переданный первым аргументом. <script src="http://code.jquery.com/jquery-1.8.2.js"></script> <script> alert($.extend); </script> Цитата:
всё нормально extend'ится.
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<div id="item"></div>
<script>
$('#item').data('options',{opt1:'a'})
newoptions = {opt1:'b', opt2:'b'};
$.extend(true, $('#item').data().options, newoptions)
alert( $("#item").data().options.opt2 );
</script>
|
Ух, вычислил бяку, но не могу понять отчего так. Вот пример: http://jsfiddle.net/tamtakoe/8fbAH/12/
Видно что $.extend, в отличие от обычного присваивания перезаписывает объект с которым не имеет связи. У кого-нибудь есть объяснения? |
var t = $.fn.test.defaults - t ссылается на defaults
t = {opt1: 'z'} - t теряет ссылку на defaults и ссылается на новый объект, defaults останится без изменений Как-то так :blink: |
А как отвязать t от $.fn.test.defaults? Нужно чтобы в t были значения, а не ссылка на объект
|
Переменные это ссылки на объекты. Попробуйте описать задачу по другому, может будет другое решение
|
Как по-другому-то? Задача: дополнить дефолтными настройками объекты, не меняя при этом дефолтные настройки.
Конечно, это можно сделать так: t = $.extend({}, t, {opt1: 'a'}), но получается масло-масленое |
| Часовой пояс GMT +3, время: 06:54. |