2013-09-24 3 views
0

Здравствуйте, я знаю, что этот вопрос задан много раз, но слишком много мнений и аргументов. У меня нет большого опыта для проверки ответов, поэтому здесь я объясню, что я ищу, и, возможно, вы можете указать мне в правильном направлении.Расширение javascript-объекта и его свойств

В моем приложении я создал объект с некоторыми методами, большинство из них имеет набор предопределенных значений по умолчанию, например, так:

module.exports = { 

    submit: function(options) { 

     var defaults = { 
      _id: 1453, 
      text: 'Some text', 
      dataObj:{ 
       links: 3532, 
       arr: ['James','Paul','Lina'], 
      }, 
      dims:{ 
       width: getClientWidth(), 
       height: getClientHeight() 
      } 
     } 

     options.extend(defaults); 

     return sendData(defaults); 

    } 

    // other similar methods - functions 

}; 

То, что я заинтересован в это, чтобы расширить свойства и атрибуты локальной переменной по умолчанию. Как видите, значения по умолчанию - это сложный структурированный объект. Имейте в виду, что структура параметров может быть еще более сложной. Так что простой мелкий слияние/копия может быть не идеальной здесь, если я не ошибаюсь.

Использование, как вы можете себе представить:

var app = { 
    // stuff 
} 

app.fn = require('common/lib.js'); 

app.initialize(function(){ 
    var settings = { 
     // hell here 
    } 
    app.fn.submit(settings) 
}) 

Спасибо заранее.

PS. Никаких библиотек не используется, и я заинтересован в чистой javascript-реализации функции extend() в любом случае. спросил здесь

+0

вы используете NodeJS или запуске в браузере? В любом случае попробуйте: 'options.extend (true, defaults);' он устанавливает флаг «глубокой копии». Редактировать: по крайней мере, для ряда библиотек он должен. Не совсем уверен, откуда идет ваша функция расширения. – Hless

+0

Я не использую библиотеку, это для проекта appcelerator, над которым я работаю, и я ищу решение для javascript ppure – Syd

ответ

0

Похожий вопрос: deep extend (like jQuery's) for nodeJS

Просто скопируйте функцию простираться от принятого ответа на свой проект, так что она доступна в правильном объеме. Затем используйте его следующим образом: options = extend(true, defaults, options);

Ваш объект настройки может выглядеть следующее и будут объединены в верхней части по умолчанию правильно:

var settings = { 
    text: "Other text", 
    dataObj:{ 
    links: 3531 
    } 
}; 
Смежные вопросы