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

つまり、ビューモデルオブジェクト内に最初のバリアントを次のように記述したということです。

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

この場合、この関数はビューモデルオブジェクトの「プロパティ」ではなく、ノックアウトを介してバインドすることはできません。

ただし、オブジェクトの一部として指定する場合は、バインドできます。

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

私が理解しているように、これら2つのバリアントの間に違いはありません。グローバルスコープで関数を定義します(JSオブジェクトとは関係ありません)。

于 2012-04-17T13:19:24.980 に答える
0

とを使用することの間でjavascriptに大きな違いがありfunction x(y) { ... }ますx = function (y) { ... }

特にthis.x = function (y) { ... }関数内で定義する場合は、実際に関数(オブジェクト指向用語のクラス)にパブリックメソッドを作成します。

于 2012-04-17T12:37:50.407 に答える