最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

loops - Javascript: Call method on object in array of objects - Stack Overflow

programmeradmin1浏览0评论

I created a class with a method:

class MyClass{

myMethod(){
    return ...;
}}

After that I push every instance of that class to an array:

let myList = [];
myList.push(myClass)

How can I call myMethod() within a loop? This code fails:

for (var i = 0; myList.length; i++) {
    myList[i].myMethod();
}

Uncaught TypeError: Cannot read property 'myMethod' of undefined

Thx, piccus

I created a class with a method:

class MyClass{

myMethod(){
    return ...;
}}

After that I push every instance of that class to an array:

let myList = [];
myList.push(myClass)

How can I call myMethod() within a loop? This code fails:

for (var i = 0; myList.length; i++) {
    myList[i].myMethod();
}

Uncaught TypeError: Cannot read property 'myMethod' of undefined

Thx, piccus

Share Improve this question asked May 24, 2017 at 6:04 piccuspiccus 1712 silver badges9 bronze badges 0
Add a ment  | 

2 Answers 2

Reset to default 2

You should crate an instance with new operator in order to call a method:

class myClass{
  myMethod(){
    console.log('hi');
  }
}

let myList = [];
myList.push(new myClass())
myList.push(new myClass())
myList.push(new myClass())
myList.push(new myClass())
myList.push(new myClass())

for (var i = 0; i < myList.length; i++) {
    myList[i].myMethod();
}

If you need to call this method without instance, define it as static:

class myClass{
  static myMethod(){ // notice static
    console.log('hi');
  }
}

let myList = [];
myList.push(myClass)
myList.push(myClass)
myList.push(myClass)
myList.push(myClass)
myList.push(myClass)

for (var i = 0; i < myList.length; i++) {
    myList[i].myMethod();
}

You could keep track of each instance of MyClass by pushing this into myList when the constructor is called. That way you don't have to keep remembering to push into myList each time you construct a new MyClass instance.

var myList = [];

function MyClass (theAnswer) {
  this.theAnswer = theAnswer;  
  this.getTheAnswer = function () {
    console.log(this.theAnswer);
  };
  
  // Keep track of all instances of MyClass here.
  myList.push(this);
}

new MyClass(42);
new MyClass(null);
new MyClass('Dunno');

for (var i = 0; i < myList.length; i++) {
    myList[i].getTheAnswer();
}

发布评论

评论列表(0)

  1. 暂无评论