2010-06-27 3 views
3

Эй, мне было интересно, если установить объект равным $ .extend(), но установка цели на тот же объект избыточна?

setOptions(options = $.extend({ 
     classPrefix: 'imgareaselect', 
     movable: true, 
     resizable: true, 
     parent: 'body', 
     onInit: function() {}, 
     onSelectStart: function() {}, 
     onSelectChange: function() {}, 
     onSelectEnd: function() {} 
    }, options)); 

ответ

2

Они, как вы его закодировали, это не избыточно. Это связано с тем, что объект первый, который был передан, является тем, который был изменен, поэтому все свойства в options копируются в анонимный объект, который вы передаете в качестве первого параметра. Таким образом, вам нужно было бы присвоить возвращаемое значение $.extend чему-то, чтобы он мог реально его использовать. Если бы вы сделали это наоборот:

$.extend(options, { ... }); 

Тогда назначение является излишним. Также обратите внимание, что порядок, в котором вы передаете объекты, важен. Выполняя это так, как вы это сделали, анонимный объект в основном является «значением по умолчанию», и что-либо в options переопределит их.

Наконец, поскольку вы передаете результат на вызов setOptions (который, как я полагаю, сохраняет значение где-то), вам также не нужно явно назначать options. Но это полностью зависит от того, что делает setOptions и что вам нужно options для последующего ...

Смежные вопросы