javascript - 成员函数的 JS 最佳实践

标签 javascript optimization functional-programming

我正在编写一个小型手机游戏库,但我不确定声明实例化函数对象的成员函数的最佳做法。

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

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

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

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

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

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

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

我是对的吗?如果我是对的,这样做对内存/性能有好处吗?

最佳答案

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

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);
    }
};

推荐阅读:

关于javascript - 成员函数的 JS 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19614371/

相关文章:

javascript - 如何获得对 Promise 的延迟对象的引用?

javascript - 为什么 'eval'执行会出错?

javascript - 如何使用 javascript 删除我的浏览器 cookie?

matlab - 如何执行优化的图形解决方案?

javascript - 使用 lodash 在 JavaScript 中对多行数据进行排序

java - 代码中的变量范围

optimization - 这种简单优化的机器学习算法是什么?

javascript - 如何在 Javascript 中最佳地交错相同固定 N 长度的 K 个数组

.net - F# 引用另一个文件中的模块函数

functional-programming - 编写 OCaml 函数的正确且流畅的方法是什么?