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

为何箭头函数无法在Node.js和Express中为数组属性赋值?

箭头函数与普通函数的this绑定差异问题

你定义的对象中,箭头函数版本的setUsers无法修改data.users,但普通函数版本可以,核心原因是箭头函数和普通函数的this绑定规则完全不同,二者并非功能一致。

两种写法对比

箭头函数写法(无法正常工作):

const data = {
  users: require("../model/users.json"),
  setUsers: (newUsers) => {
    this.users = newUsers
  } 
}

普通函数写法(正常工作):

const data = {
  users: require("../model/users.json"),
  setUsers: function (newUsers) {
    this.users = newUsers
  } 
}

具体原因解释

  • 普通函数的this绑定规则:当普通函数作为对象的方法被调用时(比如data.setUsers(...)),this会自动指向调用该方法的对象,也就是这里的data。所以this.users等价于data.users,赋值操作自然能修改对象的users属性。

  • 箭头函数的this绑定规则:箭头函数没有属于自己的this,它的this是在定义时从外层作用域继承而来的,和调用方式无关。在你的场景中,箭头函数setUsers定义在模块顶层(或全局作用域),它继承的this是全局对象(浏览器环境为window,Node.js模块环境为module.exports对应的对象),而非data对象。所以你执行this.users = newUsers时,其实是给全局对象添加了users属性,完全没影响到data的users。

简洁替代写法

如果想用更简洁的语法,也可以用ES6的方法简写,本质还是普通函数,同样能正常工作:

const data = {
  users: require("../model/users.json"),
  setUsers(newUsers) {
    this.users = newUsers
  } 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:43:39