我正在编写一个小型的移动游戏库,我不确定声明实例化函数对象的成员函数的最佳实践。
例如,我可能会创建一个带有一个属性的简单对象,以及一个打印它的方法:
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实例时必须分配的更多内存。
我是否正确,如果我是,那么这样做有什么记忆/表现好处吗?
答案 0 :(得分:3)
您是对的,在第一种情况下,使用Foo
构造函数创建的每个对象都将具有打印机功能的实例。避免这种情况的一种简单方法是将其添加到prototype
的{{1}}:
Foo
或者:
function Foo(id){
this.id = id;
};
Foo.prototype.print = function () {
console.log(this.id);
};
建议阅读: