0

我是淘汰赛的新手。我想知道这三者之间的区别,以及根据最新框架,哪一个是最好的。

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

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

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

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

方法一

    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
         };   
   }();

方法二

    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 声明和返回语句以及 this 关键字对 self 的使用。

请提供您的意见。

4

1 回答 1

1

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

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

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;
};
于 2013-10-07T12:47:43.707 回答