You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript Date对象添加自定义方法时普通函数与箭头函数差异问题

问题原因

该报错的核心原因是箭头函数与普通函数的this绑定规则存在本质差异:

  • 普通函数的this是运行时动态绑定的:当你将普通函数赋值给Date.prototype作为实例方法,调用时this会自动指向触发方法调用的Date实例对象,所以可以正常调用实例自带的getFullYear原生方法。
    普通函数实现的可运行代码如下:
    Date.prototype.lastYear = function () {
      console.log(this.getFullYear() - 1)
    }
    
  • 箭头函数没有独立的this,它的this是词法静态绑定的:只会继承自身定义位置外层作用域的this,和调用方式、调用对象没有任何关系。你在全局作用域下给Date.prototype赋值箭头函数时,该箭头函数的外层作用域就是全局作用域,this指向全局对象(浏览器环境为window,Node.js环境为globalThis),全局对象上不存在getFullYear方法,因此调用时会抛出TypeError。
    报错的箭头函数实现代码如下:
    Date.prototype.lastYear = () => {
      console.log(this.getFullYear() - 1)
    }
    

补充说明

箭头函数天生不适合用来定义对象方法、类原型方法,这类场景都依赖this动态指向调用方实例,刚好是箭头函数不支持的特性,日常开发时要注意规避。


内容的提问来源于stack exchange,提问作者p4avinash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:06:06