javascript - 类模拟中的 JS 和方法

标签 javascript html oop

我对此很陌生,所以我会尽力尽可能详细。

我正在使用函数创建一个 JS 类。

function Bandstar(p, id)
{
  var numberOfSides, Xcenter, Ycenter;
  var canvas;
  var circlesInt;
  var linesInt;
  var lines;
  var linesInt2;
  var linesMidToEdge; 
.....

当涉及到方法时,我只是这样声明它们:

this.IAset = function(a) 
{
   for (var i =0; i<= this.numberOfSides-1;i++)
   {
      if (parseInt(a[i]) == a[i])
         this.circles[i].value = a[i];
      else
         return false;
    }

    this.IArepaint();
    return true
}

差不多就是这样了。

现在的问题是,当我创建特定方法时:

this.moveFunc = function(e)
{
   var p = e.target;
   this.IAmove(p);
};

方法 IAmove 声明如下:

this.IAmove = function(p)
{
   var m = (p.oTop - this.Ycenter ) / (p.oLeft - this.Xcenter);
   var linea = m * ( p.left - p.oLeft) + p.oTop;
   var ejeX = p.left;
   ...
} 

编译器不断抛出此错误:

Uncaught TypeError: Object function (e)   {     var p = e.target;     this.IAmove(p);   } has no method 'IAmove'

所以,问题是我将 moveFunc 声明为一个函数,但是当我尝试使用 this 属性时,它实际上并没有使用该实例它上面的类 (Bandstar),但它本身(显然 moveFunc 没有名为 IAmove 的方法,该类它正在创建的是)...

我认为这就像它的工作原理一样,但我一定没有正确理解 JS 中的继承和类形态的概念。

如何从同一类中的另一个方法访问类中的方法?如果我只写 IAmove(p) 它只会说方法 IAmove() 未定义(因为它不是,它是 Bandstar 命名空间的一部分。

我知道这一定是一些我没有看到的愚蠢的事情。有什么建议吗?

最佳答案

函数内的上下文可能会根据您的调用而改变。所以 this 不可能是原始对象。

您应该添加一个私有(private)变量,例如:

 function Bandstar(p, id)
{
  var numberOfSides, Xcenter, Ycenter;
  var canvas;
  var that = this; // add this line

并在尝试调用原始对象的函数(或获取属性)时使用它

this.moveFunc = function(e)
  {
    var p = e.target;
    that.IAmove(p); // change this line
  };

确保指向原始对象。

编辑:根据评论,您可以在 Stuart's answer 中阅读更多信息

关于javascript - 类模拟中的 JS 和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154625/

相关文章:

html - 电子邮件中的 Outlook 中的双图像

javascript - 单独适用于页面上多个元素的方法

javascript - 按钮以相同的形式调用另一个按钮的方法

javascript - jQuery 性能全屏淡入淡出

javascript - 验证验证组

python - Pathos 无法腌制由 GDAL 模块创建的 SwigPyObject

python - 创建类 python 和 __init__ 的实例

javascript - 无法读取未定义的 angular2 的属性 'version'

javascript - 如何编写正则表达式来动态更改产品 ID 和 anchor 标记

html - 我怎样才能使这个 div block 转换方式与这个网站示例相同