成员函数的 JS 最佳实践

JS best practice for member functions

本文关键字:最佳 JS 函数 成员      更新时间:2023-09-26

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

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

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 实例时必须分配的更多内存。

我是否正确,如果我是正确的,这样做是否有任何内存/性能优势?

你是

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

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

或:

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

推荐阅读:

  • Mozilla 开发者网络:继承和原型链
  • Douglas Crockford: JavaScript - The Good Parts