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

迅速かつ簡単な方法は次のとおりです。

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 に答える
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 に答える