首页 > 解决方案 > 原型链如何在 Javascript 中工作?

问题描述

我正在尝试为 Thief 类建立一个原型链来继承 Assassin 类的方法,它的工作原理如下:

function Assassin() {
       this.sonicBlow = function() {return "Performs Sonic Blow!"};
       this.enchantDeadlyPoison = function() {return "Performs Enchant Deadly Poison!"}
   }

   Assassin.prototype.venomDust = function () {return "Performs Venom Dust!"}

   function Thief() {
       this.hide = function() {return "Performs Hide!"}
   }

   Thief.prototype = new Assassin()

   let thief = new Thief()

   let sin1 = new Assassin()

   console.log(thief.sonicBlow())

   console.log(thief.enchantDeadlyPoison())

   console.log(thief.venomDust())

但是当我尝试让 Assassin 类继承 Thief 类方法时,如果我这样做,它将不起作用:

   Assassin.prototype = new Thief()

   console.log(sin1.hide())

它说:sin1.hide 不是函数

谁能告诉我为什么?

标签: javascriptprototype

解决方案


您将需要更清楚地了解您正在尝试做什么。请记住,原型链应该是没有循环的链。您需要决定 Assassin 是否应该从 Thief 继承,反之亦然。例如,如果您希望 Thief 和 A​​ssassin 都有一个共同的 hide 方法,您可能想要创建第三个类 BadGuy,并让 Assassin 和 Thief 都继承自该方法。

最后,ECMAScript 6(即 Javascript 6)对类和继承有更好的支持。你可能想看看这个:http ://es6-features.org/#ClassInheritance


推荐阅读