2013-10-05 5 views
0

Я новичок в нокауте. Я хотел бы знать различия между этими тремя, и какой из них лучше всего в соответствии с последними рамками.Объявления нокаута

Подход 1 (InvoiceTypes): Объявление всех переменных и методов с использованием запятой и, наконец, использование оператора return для раскрытия методов открытого интерфейса.

Подход 2 (OrderTypes): Он похож на подход 1, но используется точка с запятой, чтобы различать каждую переменную или метод.

Apprach 3 (ModelTypes): Он похож на подход 2, но без оператора возврата.

Окончательно заданный способ запуска метода start в каждом подходе в jquery read.

подход 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 & return statement и использование self по этому ключевому слову.

Просьба представить ваши данные.

ответ

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; 
}; 
+0

Спасибо за ваши разъяснения. Ошибки - это моя опечатка. – user1837788

Смежные вопросы