4

これがChromeで機能しない理由は何ですか? TypeError が発生します。これは Date オブジェクトではありません。しかし動作します
var foo = (new Date).getDate;
foo();

(new Date).getDate()

4

5 に答える 5

4

あなたの例では、関数が適切にバインドされていません。その foo 呼び出しの「this」オブジェクトは、元の日付オブジェクトではありません。

ロジックを機能させる 1 つの方法は、関数をバインドすることです。

var x = new Date();
var foo = x.getDate.bind(x);
foo();
于 2013-07-27T15:50:48.217 に答える
1

問題はthis、関数を呼び出すと、 が日付ではなくグローバル コンテキスト ( window) になることです。

あなたはこれを行うことができます:

foo.call(new Date());

または、どこからでも関数を使用できるようにして元の日付を使用できるようにしたい場合は、

var date = new Date();
var foo = function() { return date.getDate() }; // returns always the same date

また

var foo = function() { return (new Date()).getDate() }; // returns the current date

IE8 がない場合は、bindも使用できます。

var foo = date.bind(date);
于 2013-07-27T15:50:48.643 に答える
0

あなたがしたいことはどちらかです

var date = new Date;
var foo = date.getDate.bind(Date)
foo()

また

var date = new Date;
var foo = date.getDate;
foo.call(date);

あなたがしたように呼び出すfooと、日付オブジェクトへの参照がないため、エラーがスローされます。

于 2013-07-27T15:53:14.447 に答える
0

fooあなたのコードは、どのオブジェクトにもバインドされていない単なる関数であるためです。Date呼び出すには、オブジェクトからの他の情報が必要です。あなたはこれを行うことができます:

var date = new Date()
var foo = date.getDate
foo.call(date)
于 2013-07-27T15:54:19.043 に答える