在javascript中实例化一个新类时,不将其分配给变量有什么害处
When instantiating a new class in javascript, what's the harm in not assigning it to a variable?
所以,假设我有一个类(不是一个很好的例子,但它适用于此目的):
function Apple (type) {
this.getInfo = function() {
alert('this apple is green');
};
this.getInfo();
}
我想创建一个实例,所以我通常会这样做:
var apple = new Apple();
但是,在我的场景中,由于实例将立即执行,因此我不需要该变量,因此我只想执行以下操作:
new Apple();
我知道这是可能的,但我不知道的是JavaScript会在幕后做什么。它是否会创建内存引用?它会在全局变量中放入一些标记吗?还是它只是运行一次性执行类实例?
从本质上讲,我问的是仅仅使用"new Apple();"有什么害处。
更新
由于这显然太模棱两可,无法获得我正在寻找的建议,让我更具体一点。 在我的公司,我们对javascript文件使用标准的分类结构,只是为了保持一致性。 这就是我正在谈论的结构(请注意,您使用的是 http://ejohn.org/blog/simple-javascript-inheritance/中的类设计):
MyClassName = Class.extend({
init: function (/*param1, param2, etc*/) {
// this method is called immediately when the class is instantiated.
},
destroy: function () {
// this is your clean up method.
}
});
有时候,MyClassName不需要仅仅因为init方法启动整个事情而不需要分配给变量,所以除了lint选择"new MyClassName()"的用法之外,这是一个错误,核心Javascript会做什么是我的终极问题。
大多数 JS linter 会标记实例化类而不将其分配给变量或属性,因为它指示:
- 你犯了一个错误,实际上需要一个参考,或者 您
- 调用构造函数是为了解决其副作用(如此处的情况),在这种情况下,您最好改为调用函数。
在后一种情况下,很可能(尽管这取决于 JS 环境)通过实例化未引用的对象来分配不会使用的内存。在构造函数中产生副作用通常也是一个坏主意(尽管这是意见),因为它们破坏了开发人员对创建实例将做什么的期望,并且它们可能导致难以发现的错误。将副作用代码放在方法中并调用它通常更简单:
function Apple (type) {
this.getInfo = function() {
alert('this apple is green');
};
}
var a = new Apple();
a.getInfo();
人们已经解决了为什么你不应该,所以我会说实际发生的事情。由于对象使用this
因此将创建新的内存引用。假设您没有将该引用传递给任何内容(即,在另一个对象或闭包上下文中存储对该对象的引用),并且它不引用任何外部的持久值(闭包上下文中的任何内容在其他地方使用),那么它将在下一个垃圾回收周期中被收集。
本文专门讨论 V8 的内存模型,但大多数 Javascript 引擎都遵循类似的模型。
TL;DR 这不被认为是好的做法,但假设您不存储对新对象的任何引用,您的磨损不会更糟。
- 在运行时使用预先确定的对象分配变量
- 重新分配变量和重新定义之间的性能差异
- Javascript:在对象中分配变量时命名函数的好处
- Angularjs 控制器在服务方法返回之前从服务中分配变量
- 在 JavaScript 中的 for 循环中重新分配变量的目的是什么?
- 按设置的数量拆分字符串,并为拆分分配变量
- 嵌套的 if/else 语句讨论了分配变量.我已经这样做了,但它仍然不起作用
- 有没有理由不在 while 块声明中分配变量
- JSON - 访问 JSON 数组并分配变量
- Angular2 火力基地检索并分配变量
- 是否可以在运行依赖项之前在 gulp 任务中分配变量
- 在 JS 中的 for 循环中重新分配变量是什么意思
- 使用多种组合分配变量的最佳方法是什么
- 使用函数从字符串中分配变量名称
- 如何调用chrome.storage.sync.get并在页面加载时分配变量
- 在JavaScript中用冒号分配变量的语法有效吗
- 带有单选按钮的If语句不分配变量
- 正在从内部回调中分配变量
- Javascript在匿名函数中分配变量的值
- 使用jQuery分配变量类型时出错