javascript在安装后调用init函数

时间:2012-10-29 05:11:21

标签: javascript

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

3 个答案:

答案 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