javascript - 原型链如何在 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 不是函数
谁能告诉我为什么?
解决方案
您将需要更清楚地了解您正在尝试做什么。请记住,原型链应该是没有循环的链。您需要决定 Assassin 是否应该从 Thief 继承,反之亦然。例如,如果您希望 Thief 和 Assassin 都有一个共同的 hide 方法,您可能想要创建第三个类 BadGuy,并让 Assassin 和 Thief 都继承自该方法。
最后,ECMAScript 6(即 Javascript 6)对类和继承有更好的支持。你可能想看看这个:http ://es6-features.org/#ClassInheritance
推荐阅读
- arrays - Verilog中的数组与长向量
- asp.net-mvc - 如何在 ASP.NET MVC 中为错误页面指定 max-age
- sql - 针对不变语言环境的特定 SQL 查询
- php - 使用 PHP 邮件发送带附件的电子邮件;没有邮件
- laravel - Laravel 背包仪表板在开发过程中突然空白,可能是它背后的问题?
- django - django-channels 不适用于 Linux 服务器上的 daphne
- python - Tensorflow_core._api.v2.train 没有属性“slice_input_producer”
- jasmine - 如何修复类型'AsymmetricMatcher
' 不能分配给类型 '() => void'。在茉莉花/开玩笑 - xamarin - 没有暴露给 Xamarin 的 Foundation.URL 结构?
- python - 在 Python 中正确保存/导入地理编码数据