2015-01-27 3 views
-2

Я разрабатываю JS-плагин. Все необходимые параметры завернуты в n объект. Поскольку существует много методов, пользователь будет пропустить настройку необходимых параметров. В этом случае я создал объект базовой опции, включающий все параметры. Когда опция пользователя передается в функцию плагина, отсутствующие свойства должны быть установлены на внутреннюю базовую опцию.
Например,Методы метода переопределения Javascript

var option = { 
getProp:function(){alert('user prop');} // only one method. No getMsg() 
    }; 

//Inside the plugin, two methods 
var pluginBaseOption= { 
getProp:function(){alert('plugin prop');} 
,getMsg : function(){alert('plugin another method');} 
}; 

Функция pluginBaseOption должны перекрываться вариантом, но пропустили функции должны быть остались. Это означает, что конечный объект варианта должен быть:

var finalOption= { 
    getProp:function(){alert('user prop');} // user passed method instead of plugin method 
    ,getMsg : function(){alert('plugin another method');} 
    }; 

Я попытался использовать следующий способ,

function overide(initObj, baseOption) { 
    initObj.prototype = baseOption; 
    initObj.prototype.constructor = initObj; 
    return initObj; 
} 

Но возвращаемый объект не имеет ни один из перекрытых методов, как он говорит «неопределенный».

+2

* «Если downvote, пожалуйста, укажите причину.» * Комментарии т.п., которые являются * никогда * не конструктивно, и, как правило, контрпродуктивным, а также. –

ответ

1

Вы можете использовать простой расширить функции, как это:

function extend(base, obj) { 
    for (var i in obj) { 
     base[i] = obj[i]; 
    } 
    return base; 
} 

Вы можете использовать его как extend(pluginBaseOption, option).

Однако это будет работать только один раз, так как сам pluginBaseOption будет расширен. Чтобы исправить это, нам нужно клонировать его перед расширением. Хорошая вещь extend сама умеет клонировать:

extend(extend({}, pluginBaseOption), option) 
+0

Обычный 'extend' просто принимает несколько аргументов. –

+0

Правда, но есть только так много кода, который я хочу написать на вопрос в настоящее время на -2. – Scimonster