Javascript 剔除可观测项

Javascript 剔除可观测项,javascript,knockout.js,ko.observablearray,Javascript,Knockout.js,Ko.observablearray,我对由具有可观察属性的对象组成的淘汰ObservalArray有问题。我的视图模型相当复杂,但我创建了下面的简单测试,它将说明问题 我的问题是,当我更改ObservalArray中某个对象的可观察属性值时,数组中所有对象的值都会更改 我有一个department viewModel,其中包含该部门中可观察到的员工数组。然后,我创建了5个对象personVM实例,将其推送到employees ObservableArray上。personVM的每个实例都有一个唯一的名字 下面是模型和加载它们的代码

我对由具有可观察属性的对象组成的淘汰ObservalArray有问题。我的视图模型相当复杂,但我创建了下面的简单测试,它将说明问题

我的问题是,当我更改ObservalArray中某个对象的可观察属性值时,数组中所有对象的值都会更改

我有一个department viewModel,其中包含该部门中可观察到的员工数组。然后,我创建了5个对象personVM实例,将其推送到employees ObservableArray上。personVM的每个实例都有一个唯一的名字

下面是模型和加载它们的代码

var theDepartmentVM = {
        employees: ko.observableArray(), 
        departmentName: ko.observable()
};

var personVM= {
    firstName: ko.observable()
    }

$(document).ready(function (){
    departmentVM.departmentName = "SomeDepartment";
    for (i=1; i<=5; i++){
        var person = Object.create(personVM);
        personVM.firstName("EMP - " + i.toString());
        departmentVM.employees.push(personVM);
    }
    ko.applyBindings(departmentVM);
});
var theDepartmentVM={
员工:ko.observearray(),
部门名称:ko.observable()
};
var personVM={
名字:ko.observable()
}
$(文档).ready(函数(){
departmentVM.departmentName=“SomeDepartment”;
对于(i=1;i试试这个


var部门VM={
员工:ko.observearray(),
部门名称:ko.observable()
};
var personVM=函数(){
this.firstName=ko.observable();
}
departmentVM.departmentName=“SomeDepartment”;

对于(i=1;这就是答案。你能解释一下为什么这样做吗?我的对象是否需要是函数才能使用“this”对象?是的,函数就是所谓的“类”你可以创建这些函数的新实例,在这些函数中,这指的是特定实例的属性。
<div data-bind="foreach: employees">
   <label data-bind="text: firstName"></label>
</div>
<div data-bind="foreach: employees">
   <label data-bind="text: firstName"></label>
</div>
var departmentVM = {
        employees: ko.observableArray(), 
        departmentName: ko.observable()
};

var personVM = function() {
        this.firstName = ko.observable();
}
departmentVM.departmentName = "SomeDepartment";
for (i=1; i<=5; i++){
        var person = new personVM();
        person.firstName("EMP - " + i.toString());
        departmentVM.employees.push( person );
}
ko.applyBindings(departmentVM);