为什么子类化goog.ui.Button会产生这个错误?

时间:2012-07-22 05:28:16

标签: google-closure-library

我在Google Closure javascript中创建了goog.ui.Button的子类。

/**
 * @fileoverview This button makes a new widget.
 * @author David Faux
 */

goog.provide('app.ui.NewWidgetButton');

goog.require('goog.ui.Button');



/**
 * Button for creating a new widget.
 * @constructor
 * @param {goog.ui.ButtonRenderer=} opt_renderer Optional renderer used to
 *    render or decorate the button.
 * @param {goog.dom.DomHelper=} opt_domHelper Optional DOM hepler, used for
 *    document interaction.
 * @extends {goog.ui.Button}
 */
app.ui.NewWidgetButton = function(opt_renderer, opt_domHelper) {
  goog.base(
    this,
    /** @type {goog.ui.ControlContent} */ 'New Widget',
    opt_renderer,
    opt_domHelper);
}
goog.inherits(app.ui.NewWidgetButton, goog.ui.Button);

但是,当我使用var newButton = app.ui.NewWidgetButton();实例化此按钮时,我在Chrome控制台中收到错误消息:

`Uncaught TypeError: Object #<Object> has no method 'setContentInternal'`

我查找了方法setContentInternal,它似乎是类goog.ui.Control的一个方法,它是goog.ui.Button的超类,所以我迷惑为什么这个方法未定义。

1 个答案:

答案 0 :(得分:1)

newButton的实例化缺少new关键字。添加new关键字可修复错误。

var newButton = new app.ui.NewWidgetButton();

设置Closure Compiler标志--warning_level=VERBOSE以生成如下错误:

  

警告 - 构造函数(new:app.ui.NewWidgetButton,(goog.ui.ButtonRenderer | null)=,(goog.dom.DomHelper | null)=):应使用“new”关键字调用undefined < / p>