JS成员函数的最佳实践

时间:2013-10-27 03:40:36

标签: javascript optimization functional-programming

我正在编写一个小型的移动游戏库,我不确定声明实例化函数对象的成员函数的最佳实践。

例如,我可能会创建一个带有一个属性的简单对象,以及一个打印它的方法:

function Foo(id){
    this.id = id;
    this.print = function(){ 
        console.log(this.id); 
    };
};

但是,不需要在函数中声明不需要访问函数的“私有”成员的函数。我同样可以写:

function print(){
    console.log(this.id);
};

function Foo(id){
    this.id = id;
    this.print = print;
};

当通过Foo实例调用该函数时,该实例将成为this的上下文,因此在任何一种情况下输出都是相同的。

我不完全确定如何用JS分配内存,我找不到任何我能理解的具体内容,但在我看来,第一个例子是Foo的所有成员,包括打印函数,每次实例化时都会被复制 - 但是对于第二个函数,它只是获得指向一个预先声明的函数的指针,这将节省在创建更多Foo实例时必须分配的更多内存。

我是否正确,如果我是,那么这样做有什么记忆/表现好处吗?

1 个答案:

答案 0 :(得分:3)

您是对的,在第一种情况下,使用Foo构造函数创建的每个对象都将具有打印机功能的实例。避免这种情况的一种简单方法是将其添加到prototype的{​​{1}}:

Foo

或者:

function Foo(id){
    this.id = id;
};

Foo.prototype.print = function () {
    console.log(this.id);
};

建议阅读: