为什么属性访问像淘汰赛中的函数js

时间:2015-05-27 18:39:46

标签: knockout.js

请参阅以下小代码

<div>
    You've clicked <span data-bind="text: numberOfClicks"></span> times
    <button data-bind="click: incrementClickCounter">Click me</button>
</div>

<script type="text/javascript">
    var viewModel = {
        numberOfClicks : ko.observable(0),
        incrementClickCounter : function() {
            var previousCount = this.numberOfClicks();
            this.numberOfClicks(previousCount + 1);
        }
    };
</script>

numberOfClicks已被定义为视图模型中的属性,当从incrementClickCounter()函数访问它时,就像this.numberOfClicks()一样使用了括号,但为什么只是不明白。< / p>

如果我们像下面那样编写incrementClickCounter函数会有什么危害。

incrementClickCounter : function() 
{
    this.numberOfClicks=this.numberOfClicks+1;
}

寻找建议和指导。感谢

3 个答案:

答案 0 :(得分:1)

http://knockoutjs.com/documentation/observables.html

  

KO如何知道视图模型的某些部分何时发生变化?答:您需要将模型属性声明为可观察对象,因为这些是特殊的JavaScript对象,可以通知订阅者有关更改的信息,并且可以自动检测依赖关系。

如果你看the source of ko.observable(),你会发现它做的不仅仅是将其设置为一个值。

答案 1 :(得分:0)

淘汰赛使用功能样式来访问属性是因为它支持古老的浏览器,如:

  

支持所有主流浏览器,甚至是古老的浏览器

     

IE6 +,Firefox 3.5 +,Chrome,Opera,Safari(桌面/移动设备)

答案 2 :(得分:-1)

var ViewModel = function() {
    this.name=ko.observableArray('my name');
    alert(this.name())
    this.name1=ko.observableArray(['my name111'])
    alert(this.name1())
    this.name2=ko.observableArray([1,2,3])
    alert(this.name2())
};

ko.applyBindings(new ViewModel());