如果我有
myClass.prototype.subClass=
{
foo:false
}
当我在一个对象上创建一个新实例时,我怎样才能每次都将foo设置为不同的值,所以我如何在这里引用该子类
var newObj = new myclass();
答案 0 :(得分:1)
对象和数组不应该添加到原型中,除非要与所有实例共享它们。
只要您希望每个实例的这些对象的属性不同,您就必须将构造函数(或任何其他函数)中的对象分配给特定实例:
this.subClass = {
foo: true
// potentially other properties
};
也就是说,原型中可能存在“默认”对象的情况可能是合理的,但你不应该写它。
在构造函数中分配对象不会重复代码,并允许您为每个实例单独更改代码。
<强>更新强>
如果您不想更改原始构造函数,可以只是向原型添加一个新函数,并在实例化对象时调用它:
MyClass.prototype.init = function() {
this.subClass = {
//...
};
};
和
var obj = new MyClass();
obj.init();
或者你真的创建了一个新的构造函数:
function MySubClass() {
MyClass.apply(this, arguments);
// now create that object for each instance
this.subClass = {
foo: someValue
};
}
inherits(MySubClass, MyClass);
其中inherits
定义为:
function inherits(Child, Parent) {
var Tmp_ = function() {};
Tmp_.prototype = Parent.prototype;
Child.prototype = new Tmp_();
Child.prototype.constructor = Child;
}
然后,您将使用MySubClass
代替MyClass
来创建实例。
答案 1 :(得分:0)
我认为你理解原型继承是如何工作的,因为这个问题有点奇怪。但您应该能够像其他任何一样访问foo
属性:
newObj.subClass.foo = newValue