我正在尝试使用设置创建插件。将有默认设置和用户定义的设置。我将不得不以object
的方式将两者合并。我尝试了以下方法:
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();
但是我收到一个错误说:
未捕获的TypeError:无法设置未定义的属性'prop1'
我做错了什么,我该如何解决?
答案 0 :(得分:0)
我想你可能会看到这样的事情。
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
});
因此,如果使用MyPlugin()
调用null
,那么userOpt
将是一个空对象{}。
<强>输出强>:
{"prop1":false, "prop2":false, "prop3":0, "prop4":300}
.hasOwnProperty
只是检查是否已由用户设置,如果是,则使用用户的选项,否则执行默认设置。
hasOwnProperty :https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty
来自Object的每个对象都继承hasOwnProperty方法。 此方法可用于确定对象是否具有 指定属性作为该对象的直接属性 ;与in不同 运算符,此方法不会检查对象的原型 链