我正在尝试创建带有设置的插件。将有默认设置和用户定义的设置。我将必须以某种方式将两者合并在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不同 操作员,此方法不会检查对象的原型 链。