各种在线面向对象的JavaScript教程似乎建议使用传统的函数语法定义方法,例如:
function x(y) { ... }
相当于:
x = function (y) { ... }
我发现了一些差异 - 例如函数名称绑定的点。
我使用传统的函数语法定义了我的方法,但发现我无法在knockout.js中创建“submit”绑定。以下绑定不起作用:
<form id="myForm" action="#" method="get" data-bind="submit: x">
报道:
Message: ReferenceError: x is not defined;
但是,当我使用非传统的“赋值”函数语法时,它 。
任何人都可以解释为什么我无法绑定到使用传统语法的方法吗?
如果有人知道对不同方法语法之间差异的全面讨论,那可能会有用。这是一个难以搜索的主题(至少当你不确定官方术语时)。
答案 0 :(得分:0)
使用function x(y) { ... }
和x = function (y) { ... }
特别是如果你在函数中定义this.x = function (y) { ... }
,你实际上在你的函数上创建了一个公共方法(OO术语中的类)。
答案 1 :(得分:0)
您的意思是您在View Model对象中编写了第一个变体,如下所示:
var ViewModel = {
function x(y) { ... }
}
在这种情况下,此函数不是View Model对象的“属性”,也不能通过knockout绑定。
但是如果你将它指定为对象的一部分,它可以绑定:
var ViewModel = {
x(y): function { ... }
}
据我所知,这两个变体之间没有区别,你可以在全局范围内定义一个函数(与任何JS对象无关)