2012-04-17 2 views
2

Различные онлайн объектно-ориентированный JavaScript учебники, кажется, предполагают, что методы, определяющие с использованием традиционного синтаксиса функции, такие как:Как определить методы при использовании knockout.js?

function x(y) { ... } 

эквивалентно:

x = function (y) { ... } 

Я с тех пор обнаружил некоторые отличия - например, точка, в которой привязаны имена функций.

Я определял свои методы, используя традиционный синтаксис функций, но обнаружил, что не могу создать привязку «submit» в knockout.js. Следующее связывание не работает:

<form id="myForm" action="#" method="get" data-bind="submit: x"> 

Он сообщает:

Message: ReferenceError: x is not defined; 

Однако делает работы, когда я использую нетрадиционный «назначение» синтаксис функции.

Может кто-нибудь объяснить, почему я не могу привязываться к методу, который использует традиционный синтаксис?

Если кто-либо знает о всестороннем обсуждении различий между синтаксисами различных методов, это может быть полезно. Это трудный вопрос для поиска (по крайней мере, когда вы не уверены в официальной терминологии).

ответ

0

Вы имеете в виду вы написали первый вариант внутри объекта View Model, как это:

var ViewModel = { 
    function x(y) { ... } 
} 

В этом случае эта функция не является «собственностью» вашего Посмотреть объект модели, и он не может быть связан с помощью нокаута.

Но в случае, если указать его как часть вашего объекта, он может быть связан:

var ViewModel = { 
    x(y): function { ... } 
} 

Как я понимаю, что нет никакой разницы между этими двумя вариантами это вы определяете функцию в глобальном масштабе (не связанный с каким-либо объектом JS)

0

Существует большая разница в JavaScript между использованием function x(y) { ... } и x = function (y) { ... }

особенно если определить this.x = function (y) { ... } внутри функции, вы на самом деле создать публичный метод на вашей функции (класс в терминологии ОО).

+1

Dommer спросил, в чем разница, и ваш ответ повторяет, что есть разница, но не объясняет далее технические различия. У вас есть ссылки на различия? – mj2008

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