0

从 Google Maps Utility Library 查看InfoBubble 的来源,我发现作者使用点符号创建原型方法,但是在方法定义的末尾,他用括号符号重新分配了相同的 proto 属性。

这应该澄清:

/**
 * Set the style of the shadow
 *
 * @param {number} shadowStyle The style of the shadow.
 */
InfoBubble.prototype.setShadowStyle = function(shadowStyle) {
  this.set('shadowStyle', shadowStyle);
};
InfoBubble.prototype['setShadowStyle'] = InfoBubble.prototype.setShadowStyle;

任何想法?

4

2 回答 2

0

我想我已经解决了。

这种明显的废话似乎与 Google Closure 编译有关。

/**
 * Set the style of the shadow
 *
 * @param {number} shadowStyle The style of the shadow.
 */
InfoBubble.prototype.setShadowStyle = function(shadowStyle) {
  this.set('shadowStyle', shadowStyle);
};
InfoBubble.prototype['setShadowStyle'] = InfoBubble.prototype.setShadowStyle;

编译为:

k.prototype.ma=function(a){this.set("shadowStyle",a)};
k.prototype.setShadowStyle=k.prototype.ma;

如您所见,点符号.setShadowStyle被缩小为.ma,通过使用缩小形式允许内部调用尽可能简洁。

但是由于这是一个 Public 方法,因此有必要提供一种通过其原始名称调用该方法的方法。这是通过让编译器仅最小化点符号而不是关联符号来实现的。

因此,每个人都很开心;内部缩小和外部可访问性。

我无法解释的是为什么编译器不能简单地自行解决它需要保留原始名称以供公共使用。据我所知,它可以通过检测@private方法的前导块中标签的缺失来做到这一点。

也许 :

  • Closure 编译器还没有那么聪明(还),或者
  • 在编写 InfoBubble 时,Closure 编译器并不那么聪明,或者
  • 我错过了一些东西。

谁知道哪个?

于 2013-09-15T04:31:14.463 回答
-2

除非某个浏览器中存在错误,否则我认为没有理由。

于 2012-12-05T18:54:55.440 回答