JavaScript构造函数嵌套对象存储参数的问题求助
解析Shape构造函数的错误写法
咱们一步步拆解你代码里的问题,结合你能理解的Car示例来对比:
错误点1:对象字面量语法错误
你在创建position对象时写了:
const position = { this.x = x this.y = y }
这完全不符合JavaScript对象字面量的语法规则:
- 对象内部的属性必须是键值对形式,格式是
键: 值,比如x: x - 多个键值对之间必须用逗号分隔
- 这里不需要用
this,因为x和y是构造函数的参数,直接引用即可
错误点2:没有将position挂载到实例(this)上
你用const position声明了一个局部变量,这个变量只在Shape函数内部有效,外部的实例(比如const shape = new Shape(5,10))根本访问不到它。
回忆你能理解的Car示例:
function Car(make, model) { this.make = make; // 直接给实例的make属性赋值 this.model = model; }
这里是把值直接赋值给this的属性,这样实例才能访问到。同理,Shape需要把position对象赋值给this.position,而不是声明一个局部变量。
错误点3:错误理解了this的使用场景
在你写的对象内部用this.x是完全没必要的,甚至是错误的——这里的this指向的是当前实例,但你在一个局部对象里这么写,既不符合语法,也偏离了需求:需求是让实例的position属性包含x和y,而不是让position对象里的属性指向实例的x/y。
结合正确思路梳理
按照Car的逻辑,我们需要给实例(this)添加一个position属性,这个属性是一个对象,里面包含x和y两个属性,对应传入的参数:
- 给
this.position赋值一个新对象 - 对象内部用键值对存储参数
x和y
现在你可以自己试着修正代码,对比测试用例的要求来验证。
内容的提问来源于stack exchange,提问作者Matteo V
相关产品推荐
相关产品推荐

