您可以使用() 检索可观察对象的当前值。即:
var currentValue = test();
要检查 this 是否引用同一个对象,您可以使用 === 运算符:
var newValue = { view: 'abc', model: 'newmodel' };
var isTheSame = currentValue === newValue;
请注意,当您设置 observable 的值时,knockout 已经检查新值是否实际上与旧值不同。如果它们相同,则淘汰赛不会通知任何订阅者(除非您明确告诉它)。
如果要比较对象是否包含相等的键和值,则需要某种“深度比较”方法。 (How to determine equality for two JavaScript objects?)
我不确定您所说的“添加条目”是什么意思。要设置新对象,请使用:
test(newValue);
如果要将newValue变量中的属性添加到test的值中,可以使用Object.assign(make sure to check if your browser supports it)
var combinedValue = Object.assign(currentValue, newValue);
test(combinedValue);
Object.assign 将其所有参数的键和值映射到第一个参数对象。它用最新参数的值覆盖所有重复的键。
例如:
var test = ko.observable({ a: 1, b: 1 });
var newValue = { b: 2, c: 3 };
test(Object.assign(test(), newValue));
console.log(test()); // Will print: { a: 1, b: 2, c: 3 }