1

HTML/CSS/PHP/MySQLに関しては十分な知識がありますが、Javascriptはまだ私にとって大きなハードルです。なんらかの理由で、私の先生は私たちにこのばかげたコードを単純化してほしいと言っていますが、どうやってそれを行うのでしょうか?

function f(a, b, c) {
    return function() {
        return a[b](c);
    }
}
window.onload = f(document, "write", "hi!");

考えてみた

function f(a, b, c) {
    return a[b](c);
}
window.onload = f(document, "write", "hi!");

しかし、これは単純なことではありませんよね?正しい方向へのプッシュは非常に義務付けられています!

編集:みんなありがとう。私を後押しするのではなく、あなたは私のためにこれを作成するために道を踏み外しました (非常に多くの人でさえ、おっと)。幸いなことに、彼が知りたがっていたのは、私がこれをどのように行うかということだけでした。今年の Javascript はこれですべてです。とても感謝しております!

4

6 に答える 6

3

f彼は、呼び出すと別の関数が返されることを理解してほしいと思っていると思います。

function f(a, b, c) {
    return function() {
        return a[b](c);
    }
}

これは、実行すると別の関数を返す関数です。そう

window.onload = f(document, "write", "hi!");

最終的には次のようなものになります

window.onload = function() { return a[b](c); }

ここaで、、、bおよびcは、渡した値にバインドされます。したがって、そのように記述しますが、、、aおよびbc正しい値に置き換えます。return document["write"]("hi")どちらとも書けるものになってしまいreturn document.write("hi")ます。それを差し込みます:

window.onload = function() {
    return document.write("hi");
}

これは同等です。

于 2013-09-13T18:26:12.943 に答える
2

これ、もしかして?

window.onload = document.write.bind(document, 'hi!');
于 2013-09-13T18:23:24.143 に答える
2

提案されたソリューションは機能しません。イベントに応答するのではなく、が呼び出されるとdocument.writeすぐに実行されます。元の関数は実際には新しい関数を返します。あなたの例はすぐに関数を呼び出し、結果を返します。floadf

MDN ページをwindow.onloadonload見ると、関数に設定する必要があることがわかります。

window.onload = function() {
  init();
  doSomethingElse();
};

document.writeコードがメッセージであることは明らかなので、そのコードをonload関数ハンドラー内に配置します。同じ効果を実現する、より短い (しかし抽象度がはるかに低い) コードが得られます。

于 2013-09-13T18:23:28.217 に答える
2

あるいは単に document["write"]("hi");

別の方法はdocument.write("hi");

編集:おっと、このオンロードを行う必要があるのを忘れていました。

window.onload = function() {
    return document.write("hi");
}
于 2013-09-13T18:20:06.880 に答える
1

あなたのインストラクターは、関数を抽象化したい、つまり、値を埋め込まないようにしたいと思っていると思います。そうすれば、任意のオブジェクト、メソッド、および値を渡すことができ、機能します。あなたのものは非常に近いです。他の人はいくつかの問題に注意を向けています。ページの読み込み時にコードを実行する場合、これは機能するはずです。

function f(a, b, c) {
    a[b](c);
}
f(document, "write", "hi!");

onload ハンドラーを保持することもできますが、既存のドキュメントが完全に上書きされることに注意してください。本人はそれを望んでいるのかもしれません。ばかげているように聞こえますが。それは次のようになります。

function f(a, b, c) {
    a[b](c);
}
window.onload = function () {
    f(document, "write", "hi!");
};
于 2013-09-13T18:26:47.420 に答える