成员函数的 JS 最佳实践
JS best practice for member functions
我正在编写一个小的移动游戏库,我不确定声明实例化函数对象的成员函数的最佳实践。
例如,我可能会创建一个具有一个属性的简单对象,以及一个打印它的方法:
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
相关文章:
- 有条件更新d3.js力图中节点的最佳方法
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 什么's是连接供应商js文件的最佳方式
- 在node.js中编写单元测试的最佳方式是什么
- 节点:'最佳实践'使用其他js文件的js文件
- PHP和JS中表单验证的最佳方式
- ExtJS类的最佳实践最终导致了太多的.JS文件.性能怎么样
- Ember.js:接受的子组件和父组件之间通信的最佳实践
- 在企业应用程序框架中包含js/css文件的最佳实践是什么
- 展示纯js应用程序前端的最佳架构是什么
- 主干.js事件处理程序命名的最佳做法
- 在 ember.js 中自定义输入字段的最佳实践
- HTML + JS:设置文本区域内容样式的最佳方式
- 将参数传递到外部 JS 脚本的最佳方法
- 在下划线.js中扩展对象的最佳实践
- Ext JS - 将面板绑定到数据存储的最佳方法
- 在angular js中,每次应用程序进入状态时,重新加载状态的最佳方式是什么
- infinity.js的最佳实践
- 什么'是HTML中框架集的最佳JS替换
- 检查未定义变量的最佳JS实践是什么