unwrapObservable和()之间的区别

mhu*_*mhu 26 knockout.js

两者之间是否存在实际差异:

y = ko.observable("value");
x = ko.utils.unwrapObservable(y);
Run Code Online (Sandbox Code Playgroud)

和:

y = ko.observable("value");
x = y();
Run Code Online (Sandbox Code Playgroud)

我应该更喜欢上述之一吗?为什么?

Art*_*kov 43

不同之处在于ko.utils.unwrapObservable安全.当不知道参数是否可观察时,您应该使用它.例如:

function GetValue(x){
   return ko.utils.unwrapObservable(x);
}

function GetValueEx(x){
   return x();
}

var test = 5;
var y = GetValue(test) // Work fine, y = 5;
y = GetValueEx(test) // Error!
Run Code Online (Sandbox Code Playgroud)

因此,如果您确切知道您的参数是可观察的,则可以使用()否则使用unwrapObservable.

编辑:unwrapObservable在淘汰赛2.3中添加了更短的版本-ko.unwrap