【发布时间】:2019-11-20 13:30:55
【问题描述】:
我做了一个构造函数,并打算做大量的对象。
function Cat(name) {
this.name = name;
this.meow = function () {
...
...
}
}
说,meow() 函数很长。如果我创建了很多猫或者 javascript 会处理它,它会成为内存问题吗?在这种情况下,创建静态函数而不是对象内的函数更好吗?
【问题讨论】:
-
通常你将函数放在原型中,而不是放在每个实例中。
-
您是否有意避开modern JS's dedicated support for classes via the
classkeyword?使用它们会消除这种担忧; JS 解释器应该自动使用任何最有效的解决方案,而不必担心您是否意外地为每个实例创建了一个闭包(碰巧,它基本上是为您创建一个带有每个方法的单个副本的原型)。 -
meow函数是否冗长无关紧要。它为每个实例创建一个新的函数对象,如果您有无数个实例,这将成为一个问题。主体的代码大小不会影响用于这些函数对象之一的内存。 -
@ShadowRanger 不知道你说的“它基本上是用每个方法的一个副本创建一个原型”是什么意思?
-
@Bergi:其他答案中给出的解决方案是手动将函数附加到
Cat.prototype,例如Cat.prototype.meow = function() {};是现代class语法在幕后自动执行的操作。该函数创建一次,并且单个副本绑定到原型。当您尝试查找instance.meow时,Cat的每个实例都会找到该单个副本。
标签: javascript performance object