2

各种在线的面向对象 JavaScript 教程似乎都建议使用传统的函数语法定义方法,例如:

function x(y) { ... }

相当于:

x = function (y) { ... }

从那以后,我发现了一些差异——例如,函数名称的绑定点。

我正在使用传统的函数语法定义我的方法,但发现我无法在 knockout.js 中创建“提交”绑定。以下绑定不起作用:

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

它报告:

Message: ReferenceError: x is not defined;

但是,当我使用非传统的“赋值”函数语法时,它确实有效。

谁能解释为什么我不能绑定到使用传统语法的方法?

如果有人知道对不同方法语法之间差异的全面讨论,那可能会很有用。这是一个很难搜索的主题(至少当您不确定官方术语时)。

4

2 回答 2

0

您的意思是您在 View Model 对象中编写了第一个变体,如下所示:

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

在这种情况下,此函数不是您的视图模型对象的“属性”,它不能通过敲除绑定。

但是如果您将其指定为对象的一部分,则可以绑定它:

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

据我了解,这两个变体之间没有区别,您可以在全局范围内定义一个函数(与任何 JS 对象无关)

于 2012-04-17T13:19:24.980 回答
0

function x(y) { ... }javascript的使用和使用之间有很大的区别x = function (y) { ... }

特别是如果您this.x = function (y) { ... }在函数内部定义,您实际上会在函数上创建一个公共方法(OO 术语中的类)。

于 2012-04-17T12:37:50.407 回答