0

在将类方法插入数组后,我在使用类方法时遇到问题。当我把它拉回来时,我不能再使用它的方法了。

  • 而且我知道javascript没有类,当我说类时,我的意思是对象-或js相等。

假设我有以下内容:

// a simple atomic class

function raw_msg(msg) {
  this.msg = msg;

  this.print = function () {
    console.log(this.msg);
  }

}

 // and then i have this container for this "atomic" class
 // which accept array of unknown object (known to me though..) = in_buffer
 // i.e in_buffer is just an array of objects (one type of object)

function buffer(in_buffer) {

  this.trans_buffer = null;

  if (in_buffer!=null)
     this.set_buffer (in_buffer);

  this.set_buffer = function (buffer) {
    this.trans_buffer = [];
    var length = buffer.length,
      row, new_raw_msg;
    for(var x = 0; x < length; x++) {
      row = buffer[x];
      this.trans_buffer.push(new raw_msg(row));
    }
    console.log(this.trans_buffer);
  }

  this.use_some_raw_msg_method = function () {
    var firstrow = this.trans_buffer[0];
    firstrow.print(); // here is the problem!!!
    //this here where i need help as it yield the error:
    //Uncaught TypeError: Object #<Object> has no method 'print' 
  }
}


// this is how i use it, this code sits in a diffrent yet another class...

// this here im just building fake array
var buffer_in = [];
for (var x=0;x<10;x++)
   buffer_in.push ("whatever" + x);

this.trans_buffer = new trans_helper(buffer_in);

this.trans_buffer.use_some_raw_msg_method (); // will yield the error as described

我希望这里很清楚,如果您需要澄清,请询问。

感谢您的帮助!

  • 未来读者请注意——检索对象和使用其方法没有问题。
4

1 回答 1

1

您的代码有几个问题。

  1. 关联数组没有.push()方法,因此以下行失败:

    buffer_in.push ("whatever" + x);
    

    要解决这个问题,只需声明普通数组:

    var buffer_in = [];
    
  2. 您试图创建名为trans_helper的函数实例,但该实例不存在。名称改为缓冲区,因此修复将是:

    var trans_buffer = new buffer(buffer_in);
    
  3. 最后但并非最不重要的一点是,当“类”中的函数还不存在时,您尝试调用它。JavaScript 不会提前“编译”函数,当在函数内部时,它将逐行执行。因此,在您的代码中的这一行中:

    this.set_buffer (in_buffer);
    

    您的班级中仍然没有名为“set_buffer”的函数。要解决此问题,请将上面的函数声明放在顶部。

现场测试用例

于 2013-06-06T09:06:35.627 回答