如何遍历原型 "class" JS 的实例
How to iterate through instances of a prototype "class" JS
我想要一个 "for" 或 "while" 循环来遍历原型/"class" 中的所有 instances/objects。
就像数组中的 "hasNext()"。
那我想实现一个功能。例如 alertname("obj") 这将 return 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 没有为您提供这样一个开箱即用的数组是有充分理由的:如果这样做了,那么创建的对象中的 none 可能会被垃圾回收;它们将始终被视为您仍然需要使用的东西。因此,没有内置机制是一件好事。
关于你自己的尝试
Product.prototype.getname(obj);
这没有意义:getname
没有参数。你通常会像方法一样调用原型函数:
obj.getname()
在某些情况下,您可能希望使用 Product.prototype.getname
,但仅当 obj
不是 Product
的实例时才需要,但它非常相似,可以用于在上面调用 getname
。在那种情况下使用 .call()
:
Product.prototype.getname.call(obj);
我想要一个 "for" 或 "while" 循环来遍历原型/"class" 中的所有 instances/objects。 就像数组中的 "hasNext()"。
那我想实现一个功能。例如 alertname("obj") 这将 return 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 没有为您提供这样一个开箱即用的数组是有充分理由的:如果这样做了,那么创建的对象中的 none 可能会被垃圾回收;它们将始终被视为您仍然需要使用的东西。因此,没有内置机制是一件好事。
关于你自己的尝试
Product.prototype.getname(obj);
这没有意义:getname
没有参数。你通常会像方法一样调用原型函数:
obj.getname()
在某些情况下,您可能希望使用 Product.prototype.getname
,但仅当 obj
不是 Product
的实例时才需要,但它非常相似,可以用于在上面调用 getname
。在那种情况下使用 .call()
:
Product.prototype.getname.call(obj);