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

在构造函数内调用另一构造函数的call方法作用是什么?this指向如何?

解答

1. Car.call(this, location)的作用验证

你的猜测是正确的,这行代码的核心作用就是让Van的实例继承Car构造函数中定义的loc实例属性,属于ES5阶段实现类继承的经典手段「构造函数窃取」:不需要重复在Van里写this.loc = location这类相同的初始化逻辑,直接复用父构造函数Car的逻辑即可。

注意当前代码只完成了实例属性的继承,Car原型上挂载的move方法还不能被Van实例调用,如果要实现完整继承,还需要补充两行代码:

// 让Van的原型对象继承Car的原型对象
Van.prototype = Object.create(Car.prototype)
// 修正Van原型的constructor指向,避免后续类型判断出错
Van.prototype.constructor = Van

补充后你就可以正常调用Van实例的move方法了:

const myVan = new Van(2)
myVan.move()
console.log(myVan.loc) // 输出3

2. 两处this的指向说明

  • Car.call(this, location)中的this
    这行代码定义在Van构造函数内部,当你通过new Van(xxx)的方式创建Van实例时,Van构造函数内部的this默认指向刚刚创建出来的Van实例对象,这里把它作为call方法的第一个参数传入,目的就是将Car构造函数的执行上下文绑定到这个Van实例上。
  • Car构造函数内部this.loc = location中的this
    构造函数的this指向由它的调用方式决定:
    1. 如果是通过Car.call(xxx)调用,this就指向你传入的第一个参数也就是上面的Van实例
    2. 如果是直接通过new Car(xxx)创建Car实例,this就指向当前创建的Car实例对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:15:00