gpt4 book ai didi

javascript - 如何计算对象的实例?

转载 作者:可可西里 更新时间:2023-11-01 02:16:24 26 4
gpt4 key购买 nike

如果我有一个 Javascript 对象定义为:

function MyObj(){};

MyObj.prototype.showAlert = function(){
alert("This is an alert");
return;
};

现在用户可以这样调用它:

var a = new MyObj();
a.showAlert();

到目前为止一切顺利,也可以在同一代码中运行另一个实例:

var b = new MyObj();
b.showAlert();

现在我想知道,如何保存MyObj 的实例数?是否有一些内置功能?

我想到的一种方法是在初始化 MyObj 时增加一个全局变量,这将是跟踪该计数器的唯一方法,但还有比这个想法更好的方法吗?

编辑:

看看这里的建议:

enter image description here

我的意思是我怎样才能让它回到 2 而不是 3

最佳答案

没有内置的东西;但是,您可以让构造函数记录它被调用的次数。不幸的是,JavaScript 语言无法判断对象何时超出范围或已被垃圾回收,因此您的计数器只会增加,而不会减少。

例如:

function MyObj() {
MyObj.numInstances = (MyObj.numInstances || 0) + 1;
}
new MyObj();
new MyObj();
MyObj.numInstances; // => 2

当然,如果你想防止篡改计数,那么你应该通过闭包隐藏计数器并提供访问函数来读取它。

[编辑]

根据您更新的问题 - 无法跟踪实例何时不再使用或“删除”(例如通过将 null 分配给变量),因为 JavaScript 不提供 finalizer methods对于对象。

你能做的最好的事情是创建一个“dispose”方法,当对象不再事件时(例如通过 reference counting 方案)将调用该方法,但这需要程序员的合作 - 该语言不提供任何帮助:

function MyObj() {
MyObj.numInstances = (MyObj.numInstances || 0) + 1;
}
MyObj.prototype.dispose = function() {
return MyObj.numInstances -= 1;
};
MyObj.numInstances; // => 0
var a = new MyObj();
MyObj.numInstances; // => 1
var b = new MyObj();
MyObj.numInstances; // => 2
a.dispose(); // 1 OK: lower the count.
a = null;
MyObj.numInstances; // => 1
b = null; // ERR: didn't call "dispose"!
MyObj.numInstances; // => 1

关于javascript - 如何计算对象的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12378909/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com