gpt4 book ai didi

javascript - 将函数分配给 Javascript 中的原型(prototype)是否有内存性能优势?

转载 作者:行者123 更新时间:2023-11-29 15:05:28 25 4
gpt4 key购买 nike

我读到向对象添加函数比向对象原型(prototype)添加函数会占用更多内存。

function Obj() {
this.M = function() { // do something };
}

var o = new Obj();

这个想法是,对于 Obj 的每个构造,都会创建一个新函数并将其应用于 Obj,从而增加内存使用。对于 1000 个 Obj 实例,需要创建 1000 个函数。

function Obj() {

}
Obj.prototype.M = function() { // do something };

var o = new Obj();

对于 1000 个 Obj 实例,在这种情况下,只会创建一个函数。 Netting 总共节省了 999 * sizeof(M) 内存。

真的是这样吗?如果是,以下属于什么类别:

function Obj() {
Obj.prototype.M = function() { // do something };
}
var o = new Obj();

我的直觉告诉我,对于这个例子中的每个 Obj 构造,每次都会分配原型(prototype)。我不确定在这种情况下如何看待内存使用,因为将相同的函数分配给原型(prototype)只会替换该函数,而不是为 N 个实例创建它的 N 个副本。

我刚刚开始使用此方法来封装成员函数的创建,但想确保我没有做错事。

最佳答案

function Obj() {
Obj.prototype.M = function() { // do something };
}
var o = new Obj();

好吧,正如您猜测的那样,这将创建一个匿名函数并在构造新对象期间将其分配给原型(prototype)。这毫无意义,and slightly slower ... 除非您实际上在该闭包中捕获了构造函数的参数之类的东西,在这种情况下它也是 weird - 因为无论当前的 M() 是什么,它仍将与 Obj 的所有实例共享:

function Obj(name)
{
Obj.prototype.M = function() { alert("Hello, " + name); }
}

var shog = new Obj("shog");
var josh = new Obj("josh");

shog.M(); // alerts, "Hello, josh"
josh.M(); // alerts, "Hello, josh"

如果你想出一个好的用途,我很想听听......

另见:

关于javascript - 将函数分配给 Javascript 中的原型(prototype)是否有内存性能优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3552188/

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