将默认设置合并为默认设置



我正在尝试创建带有设置的插件。将有默认设置和用户定义的设置。我将必须以某种方式将两者合并在object中。我尝试了以下内容:

JSFIDDLE

function MyPlugin(options) {
  if (typeof optoins === null || typeof options !== 'object') options = {};
  var defaults = {
      prop1: true,
      prop2: false,
      prop3: 0,
      prop4: 100,
    }
    // Set default options
  for (var name in defaults) {
    !(name in options) && (this.options[name] = defaults[name]);
  }
}
var test = new MyPlugin();

但我有一个错误说:

unturew typeError:无法设置未定义的属性'prop1'

我在做什么错,我该如何修复?

我认为您可能正在看这样的东西。

function MyPlugin(options) {
    options = options || {};
    if (typeof userOpt !== 'object') {
        options = {};
    }
    var defaults = {
        prop1: true,
        prop2: false,
        prop3: 0,
        prop4: 100
    };
    // Set default options
    for (var name in defaults) {
        defaults[name] = options.hasOwnProperty(name) ? options[name] : defaults[name];
    }
}
MyPlugin({
    prop1: false,
    prop4: 300
});

因此,如果用null调用MyPlugin(),则userOpt将是一个空对象{}。

输出

{"prop1":false, "prop2":false, "prop3":0, "prop4":300}

.hasOwnProperty只是检查一下用户是否设置了它,如果是,则使用用户的选项,否则请执行默认。

hasownProperty :https://developer.mozilla.org/en/docs/web/javascript/reference/reperference/global_objects/objects/object/hasownproperty

从对象降下的每个对象都继承了HasownProperty方法。 此方法可用于确定对象是否具有 指定属性为该对象的直接属性;与In不同 操作员,此方法不会检查对象的原型 链。

最新更新