【问题标题】:Object method doesn't get run in for loop对象方法不会在 for 循环中运行
【发布时间】:2017-06-22 16:01:09
【问题描述】:

在这段代码中,我创建了一个对象数组并尝试遍历它们,并在每个对象上调用一个方法。该方法是对象原型的一部分。

设置如下:

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

【问题讨论】:

  • 您的第一个循环有效:jsfiddle.net/k1h67p1e。在你的第二个中,你需要做myArray[key].speak();
  • @blex,奇怪,netBeans 没有显示任何东西...
  • 好的,这似乎是 NetBeans IDE 的问题。如果我打开 Chrome 开发工具,它会显示在控制台上,但不会显示在 Net Beans 浏览器日志中。感谢您的帮助。
  • 似乎只是 NetBeans 搞砸了。我重新启动了程序,现在它可以正确显示输出。很烦人。

标签: javascript object for-loop netbeans methods


【解决方案1】:

我是你的第二个循环 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*/
}

【讨论】:

  • @Taylor Liss 我可以知道你的 IDE 的版本。
  • NetBeans IDE 8.2(内部版本 201609300101)
  • 我已经尝试了你上面的建议,但我仍然没有得到任何控制台输出:(
  • 好的,这似乎是 NetBeans IDE 的问题。如果我打开 Chrome 开发工具,它会显示在控制台上,但不会显示在 Net Beans 浏览器日志中。感谢您的帮助。
  • 这很奇怪。效果很好,但是 for 循环中的任何 console.log() 都不会显示。
猜你喜欢
  • 2014-04-13
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2018-08-11
  • 1970-01-01
  • 2016-11-15
  • 1970-01-01
相关资源
最近更新 更多