【问题标题】:How to implement Inheritance concept in javascript?如何在javascript中实现继承概念?
【发布时间】:2017-05-06 17:55:25
【问题描述】:

我最近开始学习 JavaScript。但我没有任何项目经验。最近参加了关于 JavaScript 的采访:

他问了一个关于Inheritance的问题:应该是这样的:

我需要一个名为 Vehicle 的方法和另一个 two Methods Like one is Two-Wheeler and another one four-wheeler Method.

如果我为下面的这两种方法创建实例

var two-wheeler1 = new two-wheeler("Shine","125 kph") ; 

另一个例子如下

var four-wheeler1 = new four-wheller("audi","1000kph");

如果我打印了

 two-wheeler1.getWheeles()  //it should print 2 wheels

如果我打印了

four-wheeler1.getWheeles() //it Should print 4 Wheels

如何实现这一点。有人能帮帮我吗?

【问题讨论】:

标签: javascript inheritance


【解决方案1】:

大概面试官和他的公司正在使用现代 JS(ES6 或 TypeScript)进行编程。如果没有,你可能应该找另一家公司面试。 ES6 为定义类和继承关系提供了很好的简洁语法:

class Vehicle {
  constructor(brand, kmp) { 
    this.brand = brand;
    this.kmp = kmp;
  }

  getWheels() { return `${this.nWheels} wheels`; }
}

class TwoWheeler extends Vehicle {
  constructor(brand, kmp) {
    super(brand, kmp);
    this.nWheels = 2;
  }
}

class FourWheeler extends Vehicle {
  constructor(brand, kmp) {
    super(brand, kmp);
    this.nWheels = 4;
  }
}

顺便说一句,在世界其他地方,我们将两轮车称为“摩托车”或“踏板车”,将四轮车称为“汽车”。

【讨论】:

  • 感谢您的帮助。不仅是为了理解目的而进行的采访,还请您帮助我了解如何实现使用 ES5 或 Venila javascript。对我来说这是很大的帮助。我向你请求。谢谢!
【解决方案2】:

请查看以下代码以更好地理解 JS 中的 OOP 和继承:

function twoWheeler(brand, kmp) {
   this.brand=brand;
   this.kmp=kmp;
   this.getWheeles=function() {
     return "2 wheels"
   };
   this.getVehicleInfo=function() {
     return "Brand Name: " + this.brand + " Speed: " + this.kmp + " Type: 2   wheeler."
   };
  }

 function fourWheller(brand, kmp){
   this.brand=brand;
   this.kmp=kmp;
   this.getWheeles=function() {
     return "4 wheels"
   };
   this.getVehicleInfo=function() {
      return "Brand Name: " + this.brand + " Speed: " + this.kmp + " Type: 4 wheeler."
    };
  }

  fourWheller.fourWheller= new twoWheeler();
  fourWheller.prototype.constructor=fourWheller;

  var twoWheeler1 = new twoWheeler("Shine","125 kph");
  var fourWheller1 = new fourWheller("Audi","1000kph");

  console.log(twoWheeler1.getWheeles())
  console.log(fourWheller1.getWheeles())

  console.log(twoWheeler1.getVehicleInfo())
  console.log(fourWheller1.getVehicleInfo())

【讨论】:

  • 我很困惑。您是从四轮车衍生出两轮车吗?请求的Vehicle 课程在哪里? fourWheeler.fourWheeler = new twoWheeler(); 是做什么的?为什么你需要在你自己的类的原型上设置构造函数——这是自动发生的,对吧?顺便说一句,它是“wheeler”,而不是“weller”,以及“wheels”,而不是“wheeles”。
  • 我没有给面试官答案,我只是尝试教他关于 OOP 和继承的基本概念,它存在于我的答案中。
  • @Hanif,这里我们正在重写每个函数的属性,那么性能方面是否可行?
  • 是的,我想是的。
  • @Hanif 它出现在我的答案中不,不是。您应该定义一个类Vehicle,然后从中派生TwoWheelerFourWheeler。任何常见的逻辑都应该在超类中。此外,通常你会在原型上定义方法,而不是在构造函数中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多