1

defaultDateを今日から25年前の日付に設定するこのコードが正しく機能する理由について私は本当に興味があります...

$('div.recipient_modal input[name="birth_date"]:first').datepicker({
    changeMonth: true,
    changeYear: true,
    defaultDate: get_recipient_default_birth_date(),
    yearRange: 'c-125:' + new Date().getFullYear()
});

function get_recipient_default_birth_date()
{
    var d = new Date();
    var y = d.getFullYear() - 25;
    d.setFullYear(y);
    return $.datepicker.formatDate('mm/dd/yy', d);
}

しかし、以下のような同じコードを持つ名前付き関数を呼び出すのではなく、匿名関数を使用して今日から25年前にデフォルトの日付を設定しようとすると...

    $('div.recipient_modal input[name="birth_date"]:first').datepicker({
    changeMonth: true,
    changeYear: true,
    defaultDate: function() {
        var d = new Date();
        var y = d.getFullYear() - 25;
        d.setFullYear(y);
        return $.datepicker.formatDate('mm/dd/yy', d);
    },
    yearRange: 'c-125:' + new Date().getFullYear(),
});

コンソールで次のエラーが発生します...

Uncaught TypeError: Object function () {
        var d = new Date();
        var y = d.getFullYear() - 25;
        d.setFullYear(y);
        return $.datepicker.formatDate('mm/dd/yy', d);
    } has no method 'getTime'

これら2つの割り当ての違いと、無名関数が機能しないのに名前付き関数が機能する理由を誰かが説明できますか?

ありがとうございました。

4

2 に答える 2

4

違いは、最初の例では、実際に関数を呼び出しているため、関数自体ではなく、関数によって返される日付値datepickerを取得していることです。

get_recipient_default_birth_date()

2番目では、関数オブジェクトを渡します。そのオプションでは関数はサポートされていません。

于 2012-05-30T17:01:43.957 に答える
3

なぜそれが機能しないのかはすでに説明しました:無名関数を値として設定しています。

匿名関数からの戻り値ではありません。

最初の作業例では、デフォルトの値を返す関数を呼び出しています。2番目の例では、無名関数を定義し、それを呼び出さずに値として直接割り当てています。

このような無名関数を使用する場合は、次のように実際に呼び出す必要があります。

defaultValue: (function() { /* stuff */; return something; })()
于 2012-05-30T17:01:41.860 に答える