确保变量在 javascript 中的构造函数之后被遗忘
Ensure that variables are forgotten after constructor in javascript
根据我目前对javascript对象模型的理解,构造函数中定义的所有变量都成为您使用构造函数创建的对象的成员。例如:
function A() {
this.memberA = 0; //memberA is now a property of A;
var memberB = 1; //memberB is now a private member of A, it can only be accessed by functions defined in the constructor
this.getMemberB = function() {
return memberB;
}
}
var a = new A(); //object of A now exists
但是,这暴露了一个问题,至少在我的理解中是这样。假设我想在构造函数中进行一些操作并临时存储它们。
function A() {
this.memberA = 0; //memberA is now a property of A;
var memberB = 1; //memberB is now a private member of A, it can only be accessed by functions defined in the constructor
this.getMemberB = function() {
return memberB;
}
var calculation = /* some complex operation that I don't want to put on a single line, like I'm doing now for simplicity*/
this.memberC = calculation;
}
据我了解,var calculation
不会成为A类的成员,虽然是私有的,但只要A的实例存在,它就会一直存在,占用内存。
我的问题是,如果我的理解是正确的,我如何确保在执行结束时忘记构造函数中声明的变量,从而释放内存。
首先,
您的第一个代码块中有一个小的拼写错误:
var a = A(); //it is incorrect, you should use
var a = new A();
关于构造函数中的var
,此变量对于构造函数的作用域是本地的,如果您不在某些闭包中使用它(它是使用外部作用域变量的函数),则会被销毁。
例如,在您的第一个代码中,有局部变量memberB
在正常情况下应该销毁,但getMemberB
函数在函数体内使用它,因此在getMemberB
处于活动状态之前不能销毁它。
因此,如果没有人使用构造函数,在构造函数中创建的所有局部变量都将被销毁并释放内存。
相关文章:
- ES6构造函数返回基类的实例
- 使用Google Visualization动态调用构造函数
- 在刚刚调用的append函数之后,jquery.height()不会返回实际值
- javascript中对象构造函数中的var属性与this.properties
- 理解typescript中的构造函数接口
- 为什么构造函数不是构造函数
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 拦截对构造函数的调用
- 使用闭包共享构造函数参数
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- 从js引擎的角度来看闭包和构造函数是如何工作的
- 如何使用此从对象访问构造函数
- Javascript:为什么是构造函数's __proto__属性Empty(){}
- 当一个重要的构造函数参数丢失时应该发生什么
- Chrome Javascript日期构造函数错误
- 如何使用构造函数's的输出,以便将值插入到对象中
- 为什么在调用父构造函数时在[]中发送数据
- 在定义了构造函数之后,是否可以将实例属性添加到JavaScript原型中
- 在构造函数之后运行其他操作
- 确保变量在 javascript 中的构造函数之后被遗忘