我创建了一个构造函数,并计划制作大量对象。
function Cat(name) {
this.name = name;
this.meow = function () {
...
...
}
}
}
说,函数meow()很长。如果我创造了很多猫,或者Javascript会照顾它,这会成为内存问题吗?在这种情况下,创建静态函数而不是在对象内创建函数会更好吗?
答案 0 :(得分:1)
为此最好使用原型。
function Cat(name) {}
Cat.prototype.meow = function(){};
大多数现代引擎(包括chrome的V8)会将对象创建优化为可重用的路径,而如果使用this.meow,则在每个实例化时都定义一个自定义的隐藏路径。
是否更好地转变为微优化?那真的取决于您的实现和环境。
要更详尽地说明原型增强性能的方式,请参见V8开发人员Toon Verwaest的这篇中等解释,Setting up prototypes in V8。
答案 1 :(得分:1)
您可以将功能添加到Cat的原型中。这样,对meow的任何调用都将引用相同的函数。
Cat.prototype.meow = function() {};
答案 2 :(得分:0)
简短答案:这并不昂贵。 长答案:研究函数式编程与面向对象编程。使用JavaScript函数式编程,您可以做各种整洁的事情,例如:
function add(a, b)
{
return a + b;
}
function subtract5(a)
{
return a - 5;
}
//You can pass functions into functions like: subtract5(add(3, 3)) = 1;
然后,您还可以使用函数式编程语言,通过诸如find,forEach,map,reduce的函数使您的生活更轻松,例如,使用条件函数将其应用于您正在使用的数组...例如:>
function condition(x)
{
return x.id == 2;
}
var users = []
users.push({
id:1,
name:"Bob"
});
users.push({
id:2,
name:"Dan"
})
// users.find(condition).name is equal to Dan
//The condition function can be a lot of things which is why it's so powerful
另一个很好的例子(我在具有很多内部函数的javascript游戏中使用了这种格式,但没有负面影响 性能)
var Cat = function(param)
{
var self = {};
self.name = param.name;
self.age = param.age;
self.birthday = function()
{
self.age++;
}
return self;
}
var youngCat = new Cat({name: "Ginger", age: 2});
youngCat.birthday();