最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

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

matteradmin7PV0评论

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();
}

Post a comment

comment list (0)

  1. No comments so far