如何循环访问原型"class" JS 的实例



我想要一个"for"或"while"循环来遍历原型/"类"中的所有实例/对象。就像数组中的"hasNext()"。

然后我想实现一个函数。 例如 alertname("obj") 这将返回 obj 的名称。 问题是我不知道具体的 obj。 该函数只获取一个字符串,然后它会在原型中搜索哪个是正确的。

   function Product(id, name) {
    this.id = id;
    this.name = name;
}
Product.prototype.getid = function() {
    i = this.id;
    return i;
};
Product.prototype.getname = function() {
    i = this.name;
    return i;
};
balloon = new Product(0, "Balloon");
var text = "balloon";
//doesnt work
function getname(obj) {
    i = Product.prototype.getname(obj);
    window.alert(i);
}
getname(text);

看起来您想跟踪使用 new Product 创建的所有对象。这是您需要自己实现的事情。

只需创建一个数组:

const stock = [];
stock.push(new Product(0, "Balloon"));
// ...
stock.push(new Product(0, "Monopoly"));

然后,您可以简单地迭代它们:

for (const product of stock) {
    console.log(product.getname());
}

JS没有为你提供这样一个开箱即用的数组是有充分理由的:如果这样做了,那么创建的对象都不会被垃圾回收;它们将始终被视为你仍然需要使用的东西。因此,没有内置机制是一件好事。

关于你自己的尝试

Product.prototype.getname(obj);

这是没有意义的:getname不接受论据。您通常调用原型函数,例如方法:

obj.getname()

在某些情况下,你会想要使用Product.prototype.getname,但只有当obj不是Product的实例时,才需要这样做,但非常相似,以至于可以调用getname。在这种情况下,请使用.call()

Product.prototype.getname.call(obj);

最新更新