2017-02-05 12 views
1

В этом коде я создаю массив объектов и пытаюсь их пропустить, вызывая метод на каждом из них. Этот метод является частью прототипа объектов.Метод объекта не запускается в цикле

Вот установка:

function TestObj(name) { 
    this.name = name; 
} 

TestObj.prototype.speak = function() { 
    console.log(this.name); 
}; 

var myArray = [ 
    new TestObj('first'), 
    new TestObj('second') 
]; 

Я знаю, что я могу получить доступ к методам правильно, потому что это дает правильный результат:

myArray[0].speak(); // displays "first" 

Однако, оба цикла я пытался не будет ничего выводить :

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

for (var key in myArray) { 
    key.speak(); 
} 
+0

Ваш первый цикл работы: https://jsfiddle.net/k1h67p1e/. В вашем втором случае вам нужно будет сделать 'myArray [key] .speak();' – blex

+0

@blex, странно, netBeans ничего мне не показывает ... –

+0

Ок, похоже, проблема с IDE NetBeans , Если я открою Chrome Dev Tools, он отобразится на консоли там, но он не отображается в журнале браузера Net Beans. Спасибо вам за помощь. –

ответ

1

I ваш второй цикл key.speak(); к myArray[key].speak();

for (var key in myArray) { 
    myArray[key].speak(); 
} 

function TestObj(name) { 
 
    this.name = name; 
 
} 
 

 
TestObj.prototype.speak = function() { 
 
    console.log(this.name); 
 
}; 
 

 
var myArray = [ 
 
    new TestObj('first'), 
 
    new TestObj('second') 
 
]; 
 
for (var i = 0; i < myArray.length; i++) { 
 
    myArray[i].speak(); 
 
} 
 

 
for (var key in myArray) { 
 
    myArray[key].speak(); /*change here in your code*/ 
 
}

+0

@ Тейлор Лисс Могу ли я узнать версию вашей IDE. –

+0

NetBeans IDE 8.2 (Build 201609300101) –

+0

Я пробовал ваше предложение выше, и я до сих пор не получаю никакого вывода на консоль :( –