уточнение документации $ .extend - PullRequest
0 голосов
/ 07 августа 2009

Следующий jQuery не меняет значения по умолчанию или опций. Возвращаемое значение совпадает с пустым. пустой был изменен и заполнен объединенными данными. Все хорошо.

var empty = {} 
var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
$.extend(empty, defaults, options);

Однако я видел, как кто-то передает истину в качестве первого варианта.

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" };  
var output = $.extend(true, defaults, options);

В этом случае значения по умолчанию были изменены. Опции такие же, а возвращаемое значение такое же, как и значения по умолчанию.

Теперь попробуйте передать false.

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var output = $.extend(false, defaults, options);

В этом случае значения по умолчанию и параметры не изменяются. Таким образом, передача true такая же, как

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 
var output = $.extend(defaults, options);

1 Ответ

1 голос
/ 07 августа 2009

Это ожидаемое поведение. Когда вы передаете true в качестве первого аргумента, это означает сделать глубокую копию, а не делиться структурой объекта. Следующий аргумент defaults становится целью путем включения необязательного логического параметра глубокого копирования, когда этот параметр имеет значение true. Вот соответствующий фрагмент из 1.3.2:

// copy reference to target object
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;

// Handle a deep copy situation
if ( typeof target === "boolean" ) {
    deep = target;
    target = arguments[1] || {};
    // skip the boolean and the target
    i = 2;
}

Когда вы указываете false, вы можете видеть, что он неявно создает новый объект, который будет целью. Эта цель будет глубокой копией обоих следующих объектов.

Это задокументировано в параметрах функции extension .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...