Javascript 如何迭代原型的实例;“类”;JS
我需要一个“for”或“while”循环来迭代原型/“class”中的所有实例/对象。 类似于数组中的“hasNext() 然后我想实现一个函数。例如,alertname(“obj”)将返回obj的名称。问题是我不知道具体的目标。该函数只获取一个字符串,然后它将在原型中搜索哪一个是正确的Javascript 如何迭代原型的实例;“类”;JS,javascript,prototype,javascript-objects,Javascript,Prototype,Javascript Objects,我需要一个“for”或“while”循环来迭代原型/“class”中的所有实例/对象。 类似于数组中的“hasNext() 然后我想实现一个函数。例如,alertname(“obj”)将返回obj的名称。问题是我不知道具体的目标。该函数只获取一个字符串,然后它将在原型中搜索哪一个是正确的 function Product(id, name) { this.id = id; this.name = name; } Product.prototype.getid = func
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);
看起来您希望跟踪使用
新产品创建的所有对象。这是你需要自己实现的东西
只需创建一个数组:
const stock = [];
stock.push(new Product(0, "Balloon"));
// ...
stock.push(new Product(0, "Monopoly"));
然后您可以简单地迭代它们:
for (const product of stock) {
console.log(product.getname());
}
JS没有为您提供这样一个开箱即用的数组有一个很好的理由:如果这样做了,那么所创建的对象就永远不会被垃圾收集;它们总是被认为是你仍然需要使用的东西。因此,这是一件好事,没有内置的机制
关于你自己的企图
这没有意义:getname
不接受参数。您通常调用原型函数,如方法:
obj.getname()
在某些情况下,您可能希望使用Product.prototype.getname
,但只有当obj
不是Product
的实例时,才需要这样做,因为它非常类似于在其上调用getname
。在这种情况下,请使用.call()
:
注意:hasNext
在JS中不存在;您可能想到了Java?这部分不起作用:对于(股票的constproduct){console.log(product.getname();}第一个错误是;不允许“of”in“for”循环。第二,我把它改为“in”,然后它说getname()不是一个函数:for(const-product-in-stock){window.alert(product.getname());}好的,我把它转换成了一个普通的for循环:for(var i=0;ialert
实际上是“未完成”。改用console.log
。控制台提供了检查代码和变量以及监视执行的好方法。
obj.getname()
Product.prototype.getname.call(obj);