1
4

1 に答える 1

5

「このオブジェクトのプロパティを変更しないでください」という概念はありません。ただし、次のような 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 との完全な互換性を選択するかを選択する必要があります。

于 2013-05-15T21:00:39.573 に答える