1

我正在尝试创建一个 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();
4

3 回答 3

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不会污染全局范围。

于 2012-10-29T05:25:15.887 回答
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!');
  }
}
于 2012-10-29T05:28:34.277 回答
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
于 2012-10-29T05:32:06.173 回答