1

我正在尝试注释我的 javascript,以便闭包不会重命名所有符号,因为我也在使用 vanilla javascript。

/**
* @constructor
* @expose
* @type{foo}
*/

foo = function (el, args) {
"use strict";
var s = "Hello World";
/*
* @expose
* @this {foo}
* @type {function}
*/
this.introduce = function () {
    return s;
 };
};

但是,当我通过具有高级优化的闭包编译器运行它时生成的输出是

foo = function() {
 this.a = function() {
 return"Hello World"

} };

我如何要求闭包保留名称引入,因为这将从外部 javascript 调用。

4

1 回答 1

4

以下选项可用于防止闭包编译器重命名符号:

如果您不想如示例中所示在函数原型上定义方法,则可以导出构造函数foogoog.exportSymbol 使用@expose导出方法。

/**
 * @param {Element} el
 * @param {...*} args
 * @constructor
 */
var foo = function (el, args) {
  "use strict";

  /** @private */
  this.msg_ = "Hello World";

  /**
   * @this {foo}
   * @return {string}
   * @expose
   */
  this.introduce = function () {
    return this.msg_;
  };
};
goog.exportSymbol('foo', foo);

通过在函数原型上定义方法,goog.exportSymbol可用于导出构造函数和方法名称。

/**
 * @param {Element} el
 * @param {...*} args
 * @constructor
 */
var foo = function (el, args) {
  "use strict";

  /** @private */
  this.msg_ = 'Hello World!';
};
goog.exportSymbol('foo', foo);

/**
 * @return {string}
 */
foo.prototype.introduce = function () {
  return this.msg_;
};
goog.exportSymbol('foo.prototype.introduce', foo.prototype.introduce);

请参阅这些相关的 stackoverflow 问题:

于 2012-07-27T05:45:23.960 回答