在尝试提出一个基本模型来处理我正在处理的应用程序域的所有类似实体时,我创建了:
- 一个基本对象(实体):具有一些共享属性和初始化器,设置为原型
- 一个产品对象(Product):从Entity“继承”。并包含“变体”列表
- 变体对象(Variant):从实体“继承”。
Product.prototype = new Entity();
Variant.prototype = new Entity();
当我运行它时,发生了一些奇怪的事情:“产品”对象中的“变体”列表最终包含两个元素,这很好,但它们不是两个单独的“变体”实例,而是指向同一个内存空间。
我已经进行了一些调试(基于警报),以确保在填充 observableArray 的“for 循环”期间,一切正常。
var Product = function (data) {
var initial = data || {};
this.variants = ko.observableArray();
this.init(initial);
if (initial.variants != null) {
for (var i = 0; i < initial.variants.length; i++) {
// NOTE: this is the misterious line. Creating two instances
// of 'new Variant', ends up pushing a single instance.
this.variants.push(new Variant(initial.variants[i]));
//-----------------------------------------------------------
alert(this.variants()[i].name());
}
}
我假设我缺少一些 Javascript 基础知识来弄清楚我做错了什么。
这是JsFiddle的完整示例。