2012-04-17 20 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

相关问题