OOP Javascript - 隔离类中的对象

Eri*_*ith 6 javascript prototype-programming

我正在尝试创建一个主对象,我可以创建多个实例,每个实例都继承子项(具有唯一/隔离属性).但是,当我这样做时,对象的属性(在被更改之后)正在改变所有创建的对象.我可能没有正确解释这个,但这个例子应该很清楚.

Main = function(){};

// Extending the main class with new object. Doing it this way so I can have these in
// separate files.
Main.prototype.foo = {
    bar: 1
}

// First instance of Main().
var A = new Main();

// Second instance of Main().
var B = new Main();

// Set the bar property to different values for each Main() object.
A.foo.bar = 2;
B.foo.bar = 3;

// Both A.foo.bar and B.foo.bar return 3.
alert(A.foo.bar);
alert(B.foo.bar);
Run Code Online (Sandbox Code Playgroud)

我想要发生的是A.foo.bar返回2和B.foo.bar返回3,这样我就有了彼此独立的孤立对象.

有任何想法吗?我只是错过了一些明显的东西吗?非常感谢!

Poi*_*nty 5

"foo"属性位于原型对象上,并且只有其中一个属性.当您通过任何实例设置它时,您正在影响同一个共享属性.

您可以在构造函数中添加实例属性:

  function Main() {
    this.instanceProperty = 1;
  }
Run Code Online (Sandbox Code Playgroud)

然后那将是每个实例.

原型不是"主模板"或类似的东西; 这是一个真实的对象.它不会复制到实例上.相反,运行时知道它在那里,并且当对实例上实际不存在的实例上的属性进行引用时,它知道走向原型链并在那里寻找属性.