1 に答える
「このオブジェクトのプロパティを変更しないでください」という概念はありません。ただし、次のような extern をセットアップできます。
/** @interface */
function DrupalBehavior() {}
DrupalBehavior.prototype.attach = function(){};
/** @constructor */
function DrupalObject () {}
/** @type {Object.<string, DrupalBehavior>} */
DrupalObject.prototype.behaviors = {};
次に、コードで:
var FOO = (
/**
* @param {Object} me
* @param {jQuery} $
* @param {DrupalObject} Drupal
* @param {*=} undefined
*/
function(me, $, Drupal, undefined) {
function init (context, settings) {
do_sutff();
};
Drupal.behaviors['FOO'] = {
attach: init
};
return me;
}(FOO || {}, jQuery, Drupal));
この場合、Drupal 引数の名前は変更されますが、behaviors
プロパティとそれに関連付けられたattach
サブプロパティは変更されません。
jQuery に関する 1 つの注意: jQuery 名前空間オブジェクトをパラメーターとして関数に渡します。Closure-compiler は、このオブジェクトの型をうまくトレースしません。リストした注釈は、jQuery 名前空間全体ではなく、jQuery オブジェクトのインスタンスに対するものです。これはおそらく意図したものではありません。Closure-compiler でこれを処理する唯一の型安全な方法は、関数クロージャーを介して名前空間を渡さないことです。
更新: リンクした JavaScript モジュール パターンの投稿を確認した後、グローバル名前空間オブジェクトを関数クロージャに渡すことを推奨しています。このパターンには、Closure-compiler に関する既知の問題があります。この点でパターンに従うか、ADVANCED_OPTIMIZATIONS との完全な互換性を選択するかを選択する必要があります。