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

JavaScript中等号的作用:构造函数赋值顺序为何导致结果不同?

为什么两个Person构造函数的赋值方向会导致不同结果?

嘿,这个问题其实戳中了JavaScript赋值操作的核心逻辑,我来给你理清楚:

首先得明白构造函数的本质:当你用new Person(...)创建实例时,JavaScript会自动生成一个空的新对象,此时函数里的this就指向这个新对象。我们写构造函数的目的,就是把传入的参数挂载到这个新对象的属性上,这样实例才能拥有这些数据。

构造函数1:正确的赋值方向

function Person(age, name, gender) { 
  this.name = name; 
  this.age = age; 
  this.gender = gender; 
}

这里的赋值逻辑是把传入的参数值(右侧),赋值给新对象this的对应属性(左侧):

  • this.name = name → 把你传入的"Bob",存到新对象的name属性里
  • 当你创建Bob = new Person(30, "Bob", "male")时,Bob这个实例就拥有了name: "Bob"的属性,自然能正常输出。

构造函数2:完全搞反的赋值逻辑

function Person(age, name, gender) { 
  name = this.name; 
  age = this.age; 
  gender = this.gender; 
}

这里的赋值方向完全颠倒了:

  • 此时this是刚创建的空对象,this.name、this.age这些属性还不存在,所以它们的值都是undefined
  • 你现在做的是把undefined(右侧)赋值给函数的参数变量(左侧)——相当于把传入的"Bob"、30这些值全给覆盖成undefined了,但新对象this的属性从头到尾都没被设置过!
  • 所以当你访问Bob.name时,这个实例根本没有name属性,结果自然是undefined。

一句话总结:赋值的方向很关键

JavaScript里的赋值是**「右值给左值」**:左侧是要被修改的目标(比如对象属性、变量),右侧是提供值的来源。构造函数的核心就是把外部传入的参数(来源),存到实例对象的属性(目标)里,搞反了自然就达不到效果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:27:40