不理解Javascript继承

不理解Javascript继承,javascript,inheritance,Javascript,Inheritance,我正在学习javascript继承。我在这里找到了一个很好的解释: 我正试图实现基于上述和其他解决方案的继承(网上有很多这样的解决方案,它们似乎都提出了不同的建议)。无论如何,我正在尝试让SportsCar继承Car并使用Car的descripbeself方法。我不确定我做错了什么 我真的不明白call做什么 编辑:看来我问的不是很清楚。问题的实质是让这行代码正常工作:fordGt.descripbeself()并获得关于我当前做错了什么的解释 添加注释为的行添加此 var Car = fun

我正在学习javascript继承。我在这里找到了一个很好的解释:

我正试图实现基于上述和其他解决方案的继承(网上有很多这样的解决方案,它们似乎都提出了不同的建议)。无论如何,我正在尝试让
SportsCar
继承
Car
并使用Car的
descripbeself
方法。我不确定我做错了什么

我真的不明白
call
做什么


编辑:看来我问的不是很清楚。问题的实质是让这行代码正常工作:
fordGt.descripbeself()
并获得关于我当前做错了什么的解释

添加注释为
的行添加此

var Car = function(make, topSpeed, color){
  this.make = make;
  this.topSpeed = topSpeed;
  this.color = color; 
}

Car.prototype.describeSelf = function(){
  document.write('Hi, I am a: ' + this.make + ', my top speed is ' +      this.topSpeed + ' and I am ' + this.color);
}

var corolla = new Car('toyota', 120, 'blue');

corolla.describeSelf();

//Code works fine up to here
var SportsCar = function(engineSize, make, topSpeed, color) {
  Car.call(this, make, topSpeed, color); 
  this.engineSize = engineSize;
};

// add this
SportsCar.prototype = Object.create( Car.prototype );

var fordGt = new SportsCar('V8', 'ford', 205 , 'red');

fordGt.describeSelf();
这是因为您确实希望正确设置原型链,以便新创建的对象在链中有其父原型

另一方面,如果将方法附加到对象本身

var Car = function(make, topSpeed, color){
  this.make = make;
  this.topSpeed = topSpeed;
  this.color = color; 
  this.describeSelf = function() ...
}

可以忽略该链(因为您已经从另一个构造函数调用了该构造函数,但是最终会将同一函数的多个实例附加到新创建的实例上。

您可以这样继续

  this.make = make;
  this.topSpeed = topSpeed;
  this.color = color;

  this.engineSize = engineSize;
,而不是使用call方法。但可能有时会有许多参数,您不会重复自己的操作。call方法的作用是:

它运行汽车构造函数内部的代码,就像代码是在sportCar构造函数中编写的一样。这是通过.call()方法中的“this”参数完成的


不过,在ES6的继承方式中,super()也做了同样的事情方法,这是必须的。

@JaromandaX我很欣赏这个链接,但这并没有帮助我理解如何向子对象的构造函数添加新属性。MDN上的示例没有传递新的道具。我的问题是如何使继承正常工作。例如,如何使这一行工作:fordGt.descripeself();我会更新这个问题。你肯定没有在跑车的原型链中设置汽车
SportCar.prototype=Object.create(Car);
。为什么?我说我感谢你的链接,它很有用。它很有帮助,这是我要找的东西的一部分…@WiktorZychla Where?如果我尝试添加它,我会得到“fordGt.descripbeself()不是函数”谢谢,这很有帮助。
var Car = function(make, topSpeed, color){
  this.make = make;
  this.topSpeed = topSpeed;
  this.color = color; 
  this.describeSelf = function() ...
}
  this.make = make;
  this.topSpeed = topSpeed;
  this.color = color;

  this.engineSize = engineSize;