0

所以我想在我的构造函数中有一个方法。我这样称呼我的构造函数

new EnhancedTooltip($("taskPreview1"))

并将其定义为

///<var> Represents the controls</var>
var EnhancedTooltip = function (toolTipObject) {

    ///<field name="alignment" type="Number">.</field>
    this.alignment = 2;
    ///<field name="associatedControl" type="Number">.</field>
    this.associatedControl = toolTipObject;
    ///<field name="caption" type="Number">.</field>
    this.caption = "Let's see how this works";
    ///<field name="description" type="Number">.</field>
    this.description;
    ///<field name="enableEffects" type="Number">.</field>
    this.enableEffects = false;
    ///<field name="fadeAnimationSpeed" type="Number">.</field>
    this.fadeAnimationSpeed = 500;
    ///<field name="image" type="Number">.</field>
    this.image;
    ///<field name="minimumHeight" type="Number">.</field>
    this.minimumHeight = 100;
    ///<field name="minimumWidth" type="Number">.</field>
    this.minimumWidth = 200;
    ///<field name="objectName" type="String">.</field>
    this.objectName = $("taskToolTip");
    ///<field name="padding" type="Number">.<field>
    this.padding = 5;
    ///<field name="tailAngle" type="Number">.</field>
    this.tailAngle;
    ///<field name="tailDiamensions" type="Object">.</field>
    this.tailDimensions = new Size(15, 0);

    EnhancedTooltip.init();

    this.init = new function () {
      ///<summary>Initializes the class EnhancedTooltip.<summary>

      console.log(EnhancedToolTip.objectName);
    };

  };

并得到EnhancedTooltip没有方法init的错误。那么我应该如何定义init。

另外,如果我想从 init 调用其他函数,我该怎么做。例如

this.addToolTipElements = function() {

    $("#workspaceContainer").append("<div id = taskToolTip class = taskToolTip</div>");

    this.objectName.append("<canvas id = toolTipCanvas class = toolTipCanvas </canvas>");


    this.objectName.append("<div id = toolTipCaption class = toolTipCaption>" + this.caption + "</div>");

 };
4

4 回答 4

1

那是因为“EnhancedTooltip”是您的构造函数,它没有“init”属性。但是,正在构造的对象 ( this) 会:

this.init();

在函数内部:

  console.log(this.objectName);

此外,它不是new function,它只是function

this.init = function() {
  console.log(this.objectName);
};

编辑啊,正如 Sirko 指出的那样,在定义函数调用该函数。

于 2012-07-04T13:51:45.900 回答
0

当您使用函数表达式时,您不能在这里依赖变量提升。

只需定义方法,然后像这样调用它:

// rest of the code    

///<field name="tailDiamensions" type="Object">.</field>
this.tailDimensions = new Size(15, 0);

this.init = new function () {
  ///<summary>Initializes the class EnhancedTooltip.<summary>

  console.log(this.objectName);
};

this.init();

在旁注中,您应该只通过this在构造函数中使用来引用您的对象。

于 2012-07-04T13:52:07.750 回答
0

首先,在声明init()方法之前调用它。

第二件事是——尝试使用更好的风格来声明 Classes。

例如,我更喜欢这个.

于 2012-07-04T13:52:40.237 回答
0

你调用 init 是错误的。您在作用域而不是原型中定义了它this,因此 EnhancedToolTip 在创建之前没有此功能。试试这个:

var EnhancedTooltip = function (toolTipObject) {
  [..]

  this.init = new function () {
    ///<summary>Initializes the class EnhancedTooltip.<summary>
    console.log(this);
  };

  this.init();
};
于 2012-07-04T13:55:59.317 回答