2012-04-17 22 views
2

各種網上面向對象的JavaScript教程似乎表明,如定義方法使用傳統的功能語法:如何在使用knockout.js時定義方法?

function x(y) { ... } 

等同於:

x = function (y) { ... } 

因爲我已經發現了一些差異 - 例如函數名稱被綁定的點。

我使用傳統的函數語法定義我的方法,但發現我無法在knockout.js中創建「提交」綁定。下面結合沒有工作:

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

據報道:

Message: ReferenceError: x is not defined; 

然而,確實工作時,我使用了非傳統的「分配」函數的語法。

任何人都可以解釋爲什麼我不能綁定到使用傳統語法的方法嗎?

如果有人知道對不同方法語法之間差異的全面討論,那可能很有用。這是一個難以搜索的主題(至少當你不確定官方術語時)。

回答

0

你的意思是你寫的第一個變種你的視圖模型對象裏面是這樣的:

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

在這種情況下,這個功能是不是你的視圖模型對象的「屬性」,它無法通過淘汰賽的約束。

但在情況下,你將它指定爲您的目標的一部分,它可以綁定:

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

我的理解有兩種變體之間沒有區別它定義在全球範圍內的函數(與任何JS對象沒有關係)

0

有使用JavaScript中function x(y) { ... }x = function (y) { ... }

之間,特別是如果你定義this.x = function (y) { ... }在函數內部有很大的區別,實際上創建你的函數(在OO術語類)的公共方法。

+1

Dommer問是否有什麼區別,你的答案重複說有差異,但沒有進一步解釋差異的技術性。你有差異的參考嗎? – mj2008 2012-04-17 13:19:26

相關問題