繁体   English   中英

如何遍历原型“类” JS的实例

[英]How to iterate through instances of a prototype “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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM