在 JavaScript 中按属性查找类实例

find class instance by property in javascript

本文关键字:查找 实例 属性 JavaScript      更新时间:2023-09-26

我想检索一些js类的实例,只有一个参数的值

比方说:

function myClass(id)
{
  this.id = id
}
myClass.prototype.sayHello = function()
{
  alert('hello');
}
myClass.instanceFromID = function()
{
  ...
}
var instance1 = new myClass(22);
var instance2 = new myClass(33);
var instance3 = new myClass(232);
var instance4 = new myClass(1533);

我希望能够通过某种方法访问该实例,例如

myClass.instanceFromID(33).sayHello();

我一直在考虑 2 种解决方案,但它们的缝砺过正

第一个想法:

将所有实例存储在数组中(全局作用域或类的静态)并遍历所有这些实例以查找并返回实例,但这意味着要跟踪、添加和删除数组中的实例。

第二个想法:

让每个实例监听文档触发的自定义事件,并将发出的数据与内部参数进行比较,检查是否相关,并向文档发出信号。

我如何以简单的方式实现这一目标,或者除了这 2 种方法之外没有其他方法?

根据你写的内容,让类本身跟踪带有实例变量的实例似乎是你正在寻找的方法。 当然,这意味着除非您显式释放实例,否则永远不会对其进行垃圾回收。 但也许这对你来说不是问题。 以下是我将如何解决这个问题:

function MyClass(id) {
    this.id = id;
    MyClass.instances[id] = this;
}
MyClass.instances = {};
MyClass.instanceFromId = function(id) {
    return MyClass.instances[id];
}