确定对象属性是否为ko.observable

我正在使用KnockoutJS版本2.0.0

如果我遍历一个对象的所有属性,我怎么testing每个属性是否是一个ko.observable ? 以下是我迄今为止所尝试的:

  var vm = { prop: ko.observable(''), arr: ko.observableArray([]), func: ko.computed(function(){ return this.prop + " computed"; }, vm) }; for (var key in vm) { console.log(key, vm[key].constructor === ko.observable, vm[key] instanceof ko.observable); } 

但迄今为止,一切都是错误的。

Knockout包含一个名为ko.isObservable()的函数。 你可以把它ko.isObservable(vm[key])

从评论更新:

这是一个函数来确定是否有一个计算观察值:

 ko.isComputed = function (instance) { if ((instance === null) || (instance === undefined) || (instance.__ko_proto__ === undefined)) return false; if (instance.__ko_proto__ === ko.dependentObservable) return true; return ko.isComputed(instance.__ko_proto__); // Walk the prototype chain }; 

更新:如果你正在使用KO 2.1+ – 那么你可以直接使用ko.isComputed

淘汰赛有以下function,我认为是你在找什么:

 ko.isObservable(vm[key]) 

我在用着

 ko.utils.unwrapObservable(vm.key) 

更新 :从版本2.3.0开始, ko.unwrap被添加为ko.utils.unwrapObservable