淘汰赛声明

时间:2013-10-05 01:02:25

标签: knockout-2.0

我是淘汰赛的新手。我想知道这三者之间的差异,以及最新框架中哪一个最好。

方法1(InvoiceTypes):使用逗号声明所有变量和方法,最后使用return语句公开公共接口方法。

方法2(OrderTypes):类似于方法1,但使用分号来区分每个变量或方法。

Apprach 3(ModelTypes):类似于方法2,但没有返回语句。

最后在jquery读取的每个方法中指定了start方法的调用方式。

方法1

    window.Domain = window.Domain || {}
    window.Domain.InvoiceTypes = function () {

        var types = ko.observableArray(),
        getTypes = function() { return types; },
        start = function() {
            types.push({name:"knockout"});
        },
        submit = function() {
            alert("submit");
        };

        return {
            getTypes: getTypes,
            start: start,
            submit: submit
         };   
   }();

方法2

    window.Domain.OrderTypes = function () {

        var types = ko.observableArray();

        var getTypes = function() { return types; };

        var start = function() {
            types.push({name:"knockout"});
        };
        var submit = function() {
            alert("submit");
        };

        return {
            getTypes: getTypes,
            start: start,
            submit: submit
         };   
   }();

方法3

    window.Domain.ModelTypes = function () {
        var self = this;

        self.types = ko.observableArray();
        self.getTypes = function() { return types; };
        self.start = function() {
            types.push({name:"knockout"});
        };
        self.submit = function() {
            alert("submit");
        };

   };

   <script type="text/javascript">
       $(document).ready(function() {

         window.Domain.InvoiceTypes.start();

         window.Domain.OrderTypes.start();

         var obj = new window.Domain.ModelTypes();
         obj.start();
       });
   </script>

我可以清楚地看到的差异是,单个var声明&amp;通过此关键字返回声明和使用self。

请提供您的意见。

1 个答案:

答案 0 :(得分:1)

方法#1和#2类似于静态工厂方法。您不是使用new关键字创建对象,而是调用静态“工厂”函数,该函数为您创建并返回新类型。至于逗号与分号方法,两者都是有效的,但我更喜欢分号而不是逗号。为什么?因为javascript用分号比用逗号更宽容。你可以在这里和那里省略分号,脚本仍然可以运行,而且必须始终存在逗号才能正确解析javascript。当脚本变大时,使用分号也更容易阅读。

方法#3是大多数淘汰赛的开发者所做或应该做的。首先,因为在函数声明的末尾不需要小(),所以它看起来更像是一个类。但是,看起来你有错误:

self.start = function() {
    //types.push({name:"knockout"}); // types was not declared,
    self.types.push({name:"knockout"}); // only self.types was declared
};

......同样的错误

self.getTypes = function() {
    //return types; types was never declared
    return self.types;
};
相关问题