我正在尝试创建一个js对象,我希望用户传入一些json数据,或者默认情况下设置对象属性,如下所示。在完成所有设置后,我终于想要调用一个运行的init函数并完成工作。谢谢你的帮助。我不是要创建一个jQuery插件。
var PictureDialog = function (settings) {
settings = {
allowShortKey: true,
prevID: null,
prevCounterNumber: null,
startValue: 0,
nextValue: 1,
init: function() {
//Do work
//Show dialog
}
},settings;
}
电话会看起来像这样吗
PictureDialog({prevID:1}).init();
答案 0 :(得分:1)
不确定为什么你需要一个init
功能。我就是这样做的:
(function () {
var defaultSettings = {
allowShortKey: true,
prevID: null,
prevCounterNumber: null,
startValue: 0,
nextValue: 1
};
PictureDialog = function (settings) {
settings = settings || defaultSettings;
//Do work
//Show dialog
};
})();
外部函数只是为了确保defaultSettings
不会污染全局范围。
答案 1 :(得分:0)
如果我理解正确你想要设置一些默认值,在jQuery的帮助下你可以像这样使用$.extend
:
function Foo( settings ) {
var _defaults = { a: 'a', b: 'b' };
settings = $.extend( settings, _defaults );
}
使用纯JavaScript,您必须执行以下操作:
function Foo( settings ) {
var _defaults = { a: 'a', b: 'b' };
settings.a = settings.a || _defaults.a;
settings.b = settings.b || _defaults.b;
}
对于init
方法,您只需将其添加到原型并在构造函数中执行它,这样您甚至不必在创建新实例时调用它:
function Foo( settings ) {
var _defaults = { a: 'a', b: 'b' };
...
this.init();
}
Foo.prototype = {
init: function() {
console.log('initialized!');
}
}
答案 2 :(得分:0)
快速而简单的方法是:
var PictureDialog = function (settings)
{
settings = {
allowShortKey: true,
prevID: null,
prevCounterNumber: null,
startValue: 0,
nextValue: 1,
init: function()
{
//Do work
//Show dialog
return this;//<--return object, too
}
};
return settings;//return the object
};
foo = PictureDialog().init();//the init will be called on the return value of PictureDialog
但是,我不知道PictureDialog
函数需要settings
参数的原因。根本不对函数传递任何内容,或更改传递的值:
var PictureDialog = (function()
{
var defaults = {
allowShortKey: true,
prevID: null,
prevCounterNumber: null,
startValue: 0,
nextValue: 1,
init: function()
{
//Do work
//Show dialog
return this;//<--Very important
};
return function (settings)
{
settings = settings instanceof Object ? settings : {};
for (var n in defaults)
{
if (defaults.hasOwnProperty(n))
{//set all properties that are missing from argument-object
settings[n] = settings[n] || defaults[n];
}
}
return settings;
};
}());
foo = PictureDialog({allowShortKey: false}).init();//will return full settings object