Как перебирать экземпляры прототипа "класса" JS - PullRequest
0 голосов
/ 25 декабря 2018

Я хочу, чтобы цикл for или while перебирал все экземпляры / объекты в прототипе / "классе".как "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);

1 Ответ

0 голосов
/ 25 декабря 2018

Похоже, вы хотите отслеживать все объекты, которые вы создаете с помощью 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);
...