简体   繁体   中英

Why am I getting “Constructor must be initialized at declaration” google closure compiler warning?

Consider this piece of code:

AEP: {
    Module: {
        _instances: {},
        get: function(module) {
            return (AEP.Module._instances[module.id] || (AEP.Module._instances[module.id] = new AEP.Module.Instance(module)));
        },
        implement: function(module, implementation) {
            AEP.Module.get({id: module}).dispatch(implementation(AEP));
        },
        /**
         * @param module
         * @constructor
         */
        Instance: function(module) {
            AEP.Event.apply(this, arguments);
            AEP.Utility.loadJSFile(module.url);
        }
    }
//...
}

I am getting this GCC warning:

WARNING - Constructor AEP.Module.Instance must be initialized at declaration

Why is that?

I'm guessing that check doesn't recognize the label as an assignment. Try this:

AEP: {
    Module: {
        _instances: {},
        get: function(module) {
            return (AEP.Module._instances[module.id] || (AEP.Module._instances[module.id] = new AEP.Module.Instance(module)));
        },
        implement: function(module, implementation) {
            AEP.Module.get({id: module}).dispatch(implementation(AEP));
        },
        Instance:
          /**
           * @param module
           * @constructor
           */
          function(module) {
            AEP.Event.apply(this, arguments);
            AEP.Utility.loadJSFile(module.url);
          }
    }
//...
}

As Crazy Train explained already; here is an example:

var AEP= {
    Module: {
        _instances: {},
        get: function(module) {
            window['console'].log("get");
        },
        implement: function(module, implementation) {
            window['console'].log("implement");
        }
    }
};
/**
* @param module
* @constructor*/
AEP.Module.Instance= function(module) {
  window['console'].log("instance");
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM