TypeError: this is not a Date object

questions:

Any idea why this does not work in Chrome?

var foo = (new Date).getDate;

 foo();

I get a TypeError: this is not a Date object. However (new Date).getDate() works

answer:

in JavaScript, the this context is not bound to each method of an object. Rather, it is determined at run-time by the way you call that method Check this answer for more about the binding behaviour…

In your code, foo receives the getDate property of new Date, which it receives from the Date.prototype through the prototype chain. Thus, your code is really equivalent to:

var foo = Date.prototype.getDate;
foo();

(Test this yourself: verify in your console that (new Date).getDate === Date.prototype.getDate is indeed true.)

Now, it should be clear that there’s no actual this context for that call. You could set it up beforehand by manually binding the function to an object. (Note: older browsers need a shiv for Function.prototype.bind.)

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

Alternatively, set up the proper this context when you call/apply the function.

var foo = Date.prototype.getDate;
foo.call(new Date);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值