Javascript对象构造:有什么区别?

pus*_* 22 4 javascript oop

这两个对象的构造有什么不同 - 除了成员变量的隐私?

function A() { this.a = 99; }
A.prototype.setA = function(newVal) { this.a = newVal; }
A.prototype.getA = function({ return this.a; }
Run Code Online (Sandbox Code Playgroud)

还有这个:

function A() {
   var a = 99;
   return {
      setA: function(newVal) { a=newVal; }
      getA: function() { return a; }
   }
}
Run Code Online (Sandbox Code Playgroud)

我对成员变量的隐私不感兴趣,就像定义函数的方式一样.

我是否正确地认为在第二个版本中,通过新A()创建的所有对象都将获得已定义函数的副本,而在第一个版本中,对定义函数的所有调用将转到唯一的原型对象(对于一个对象).这是正确的吗?

如果是这样,版本2是否有任何性能成本?

此外,一种方式优先于另一种方式 - 还是有更好的方法?

非常感谢

Joe*_*Joe 6

我是否正确地认为在第二个版本中,通过新A()创建的所有对象都将获得已定义函数的副本,而在第一个版本中,对定义函数的所有调用将转到唯一的原型对象(对于一个对象).这是正确的吗?

如果是这样,版本2是否有任何性能成本?

每个对象A的setA和getA使用更多内存

此外,一种方式优先于另一种方式 - 还是有更好的方法?

由于您不关心封装,请使用原型