Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何迭代原型的实例;“类”;JS_Javascript_Prototype_Javascript Objects - Fatal编程技术网

Javascript 如何迭代原型的实例;“类”;JS

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

我需要一个“for”或“while”循环来迭代原型/“class”中的所有实例/对象。 类似于数组中的“hasNext()

然后我想实现一个函数。例如,alertname(“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);

看起来您希望跟踪使用
新产品创建的所有对象。这是你需要自己实现的东西

只需创建一个数组:

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