-1

これらのコードはうまく機能します。

<input id="mainCheckbox" type="checkbox"/>
...
var controlCheckbox = document.getElementById( "mainCheckbox" ),
...
controlCheckbox["onclick"] = new Function( "controlCheckbox.Notify(controlCheckbox.checked)" );

なぜこれが機能しないのですか?

controlCheckbox["onclick"] = controlCheckbox.Notify(controlCheckbox.checked);
4

1 に答える 1

5

.Notify関数を割り当てず、代わりにすぐに呼び出すため、これは機能しません。

ただし、無名関数構文を使用して関数を作成できます。

controlCheckbox["onclick"] = function() {
    controlCheckbox.Notify(controlCheckbox.checked);
};

Functionこれは、コンストラクターを使用するよりも一般的なアプローチです。

2 つのアプローチの違いの 1 つは、から作成された関数がnew Function外側のローカル変数スコープを使用できないことです。globalスコープ内で直接作成されたかのようになります。

;(function() {
    var foo = "bar"; // local variable

    var x = new Function("console.log(foo);");

    x(); // ReferenceError: foo is not defined
})();

したがって、最初のコード例の変数がglobalスコープ内にない限り、変数にcontrolCheckboxアクセスできないため機能しません。

thisただし、変数はバインドされている要素への単なる参照であるため、ハンドラーで使用できるため、実際には必要ありません。

controlCheckbox["onclick"] = new Function("this.Notify(this.checked)" );
于 2013-10-12T00:38:16.900 に答える