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
相关产品推荐
相关产品推荐

