2015-03-25 3 views
2

Я ищу способ написать этот код более эффективным способом. В методе загрузки объекта он будет иметь столько строк, сколько записи в параметрах (не менее).Как эффективно копировать свойства с объекта на другой?

var myPlugin = { 
    // here are the 'plugin' default ptions 
    option1: 'deafult1' 
    , option2: 'deafult2' 
    , option3: false 
    , option4: true 
    , optionN: 'deafultN' 

    // here the plugin will receive an object ('options') 
    load: function(options){ 
    if (options.option1) myPlugin.option1 = options.option1; 
    if (options.option2) myPlugin.option2 = options.option2; 
    //... 
    } 
} 


myPlugin.load({ 
    option3: true 
    , option5: '123' 
}); 

Это правильный способ загрузить параметры в JS/jquery-плагин? Есть ли способ использовать for()/each() для загрузки объекта объектов более эффективным/аккуратным способом?

Я думал, что-то вроде:

load: function(options){ 
    $.each(options, function(index, opt){ 
     // how to load options from here? 
     // something like: 
     // myPlugin. ->current opt property name = opt 

    }); 
    } 

ответ

4

Попробуйте $.extend()

var opts = $.extend({}, myPlugin.options, options);

Это будет копировать свойства справа налево, с крайнего правого объекта, получающего наивысший приоритет.

Docs: http://api.jquery.com/jquery.extend/

+0

ok. Но myPlugin не имеет объекта «opts». все варианты прямо к плагину: 'myPlugin.option1' не' myPlugin.opts.option1' – Azevedo

+1

Хорошо. Ну, вы можете скопировать прямо на 'myPlugin.options' с' $ .extend (myPlugin.options, options) '- в зависимости от того, как вы используете' myPlugin', это может или не может вызвать проблемы из-за того, что вы были бы переопределяя значения по умолчанию каждый раз, когда вы расширяете() '. –

+0

работал для меня, как этот '$ .extend (myPlugin, options);'. Но я рассматриваю возможность ввода всех параметров в объект, например 'myPlugin.options', будет ли это более безопасным/логичным? – Azevedo

5

Взгляните на $.extend от jQuery website.

Это простой способ полностью копировать свойства по объектам или новому объекту. Например, с сайта jQuery:

var defaults = { validate: false, limit: 5, name: "foo" }; 
var options = { validate: true, name: "bar" }; 

// Merge defaults and options, without modifying defaults 
var settings = $.extend({}, defaults, options);` 
Смежные вопросы