OOP Javascript-隔离类中的对象
|
我正在尝试创建一个可以创建多个实例的主对象,每个实例都继承这些子对象(具有唯一/隔离的属性)。但是,当我执行此操作时,所有创建的对象的对象属性(更改后)都会更改。我可能没有正确解释,但是示例应该很清楚。
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);
我想要发生的事情是,让A.foo.bar返回2,而B.foo.bar返回3,这样我就有了彼此独立的隔离对象。
有任何想法吗?我只是缺少明显的东西吗?将不胜感激!
没有找到相关结果
已邀请:
3 个回复
埠仙俊
然后,将按实例进行。 原型不是“主模板”或类似的东西;这是一个真实的对象。它不会复制到实例上。相反,运行时知道它在那儿,并且当引用某个实例上实际上不存在的实例上的属性时,它就会知道在原型链中查找并在其中查找属性。
担每棱绰
和
在这两种情况下,实例化一个新的“ 4”将创建一个新实例,该实例在其原型链中具有属性“ 5”或“ 6”。在这两种情况下,都可以在不影响其他实例的情况下重新定义实例级属性:
但是,当实例化新的
时,实例变量
是对单个对象
的引用,该对象在所有实例之间共享。因此,当您设置“ 11”时,您正在更改的是公共对象,而不是实例变量。实例变量是参考“ѭ12”。 您不必在构造函数中初始化instance属性。标准方法是直接在原型上设置
,即
,这将为您提供初始化为
的独立实例变量。但是,如果根据每个实例需要更复杂的数据结构(对象,数组或另一个类的实例),则不能在原型上将其创建为属性,因为将为每个实例提供对公共对象的引用-因此在构造函数内部是可行的方法:
献导外拘
然后,您将得到不同的结果。 或者,您可以具有以下内容: