gpt4 book ai didi

javascript - 在对象数据上调用原型(prototype)函数,同时最小化内存使用

转载 作者:行者123 更新时间:2023-11-30 19:05:22 25 4
gpt4 key购买 nike

学习Javascript;我想通过使用原型(prototype)函数(#2)来减少内存使用。但是,为了将相关状态/参数从实例传递到原型(prototype)函数,我需要创建另一个函数(#1)。

据我所知,在 Javascript 中,将为每个 Row 实例创建对象方法 (#1),从而抵消通过重用原型(prototype)函数 (#2) 节省的内存。如果我用闭包替换函数 #1,内存节省也会被否定。

有没有办法让每个 Row 对象在 Row 自己的唯一状态上调用原型(prototype)函数,同时仍然最小化内存使用量?

function Row(data) { 
row = Object.create(Row.prototype);
row.state = data;

//#1
row.showInstanceState = function() {
Row.prototype.showState(this.state);
};

return row;
}

//#2
Row.prototype.showState = function(info) {
console.log(info);
}

let example = new Row(2);

/*
If function #1 didn't exist, the call
below saves memory but we have explicitly pass
in an instance's data at the moment of the call.
*/
example.showState(example.state);

//The call style below is desired, but requires function #1, which would not optimize memory usage.
example.showInstanceState();

最佳答案

当使用 new 关键字时,您基本上是在运行 Row() 函数,同时 this 指向一个新的(自动)创建对象并返回该对象。所以你的函数构造函数应该是这样的:

function Row(data) { 
this.state = data;
}

当使用 new 时,对象及其原型(prototype)已经被赋值。

然后你可以添加你的原型(prototype)方法:

Row.prototype.showInstanceState = function() {
console.log(this.state);
};

当您将方法作为实例成员调用时,this 将始终指向实例对象(除非您正在使用callapply),所以 this.state 将指向实例自己的属性(您在构造函数中创建的)。

let example = new Row(2);
let example2 = new Row(5);

example.showInstanceState(); // 2
example2.showInstanceState(); // 5

关于javascript - 在对象数据上调用原型(prototype)函数,同时最小化内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59041895/

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