4

JS ライブラリで特定のモジュールを自動化しようとしていますが、一連のプロパティ (クラスの構築パラメータとして使用されるオブジェクトとしましょう) を定義したいところで行き詰っています。

/**
 * This function initiates world peace!
 * @constructor
 * @param {object}  defaults        - The options to initiate peace.
 * @param {number}  defaults.issues - The number of issues being taken up.
 * @param {string}  defaults.source - The name of the location where process starts.
 */
 var WorldPeace = function (defaults) {
     // code here
 };

構成のすべてのプロパティが 1 つの場所で定義されていれば、それで十分です。残念ながら、私のコードには、その構築プロパティに貢献する多くのモジュールがあります。たとえば、コードの他の部分 (後のファイル) で、さらにいくつかのプロパティが発生するとします。

 * @param {Date} defaults.start  - The date when the process started.
 * @param {Date} defaults.stop   - The date when the process should stop.

WorldPeace関数に対して以前に定義したプロパティの元のセットに追加するにはどうすればよいですか? ミックスインやプロパティのサブクラス化のようなことを行うのは、行き過ぎです! そのため、単純にプロパティ リストの定義に注入できれば、それは素晴らしいことです。

4

2 に答える 2

1

最も簡単な方法は、レコード タイプを使用することです。

/**
 * This function initiates world peace!
 * @constructor
 * @param {{issues: number, source: string}} defaults - options to initiate peace.
 */
var WorldPeace = function (defaults) {
  // code here
};

インターフェイスを実装することもできます。

/** @interface */
var WordPeaceDefaults;

/** @type {number} */
WorldPeaceDefaults.prototype.issues;

/** @type {string} */
WorldPeaceDefaults.prototype.source;

/**
 * This function initiates world peace!
 * @constructor
 * @param {WorldPeaceDefaults} defaults - options to initiate peace.
 */
var WorldPeace = function (defaults) {
  // code here
};

/**
 * @constructor
 * @implements {WorldPeaceDefaults}
 */
function MyWorldPeaceDefaults() {}

/** @type {number} */
MyWorldPeaceDefaults.prototype.issues = 0;

/** @type {string} */
MyWorldPeaceDefaults.prototype.source = '';

WordPeace(new MyWorldPeaceDefaults);
于 2013-10-01T13:19:30.023 に答える