gpt4 book ai didi

javascript - 遍历对象数组时无法调用公共(public)方法

转载 作者:行者123 更新时间:2023-11-30 07:43:40 24 4
gpt4 key购买 nike

我开始尝试使用 JavaScript 中的 OOP,我有一组简单的对象,我试图循环这些对象并在每个对象上调用一个方法,但是,当我在 Google Chrome 下运行它时,我在 JavaScript 调试器中得到以下异常:

Uncaught TypeError: Object 0 has no method 'drawHisto'

Simplified code snippet below:

var histograms = [];
var h1 = null;
var h2 = null;
var h3 = null;

function Init() {
h1 = new Histogram(canvas1, "red");
h2 = new Histogram(canvas2, "blue");
h3 = new Histogram(canvas3, "green");

histograms = [ h1, h2, h3];
}

function Histogram(canvas, color) {
// this is my constructor
}

Histogram.prototype.drawHisto = function() {
// I will add code here to draw the histogram
}

function DrawHistograms() {
for (var h in histograms) {
h.drawHisto(); // Throws exception!
}

// h1.drawHisto() <--- this works
}

知道我可能做错了什么吗?我在这里稍微简化了代码,所以如果您发现问题一定出在其他地方,我可以添加额外的上下文。

谢谢。

最佳答案

JavaScript 中的 for in 循环不会遍历数组的值,而是遍历对象的键。像往常一样简单地使用 for 循环:

function DrawHistograms() {
for (var i = 0; i < histograms.length; i++) {
histograms[i].drawHisto();
}
}

或者,如果与 Internet Explorer 8 及更早版本的兼容性没有问题,您可以使用 Array.forEach:

function DrawHistograms() {
histograms.forEach(function(h) {
h.drawHisto();
});
}

关于javascript - 遍历对象数组时无法调用公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11406464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com