【问题标题】:Is Parasitic Combination Inheritance really used anymore?寄生组合继承真的不再使用了吗?
【发布时间】:2016-10-15 23:31:22
【问题描述】:

我是 JavaScript 新手。我正在阅读 Professional Javascript for Web Developers 第 6 章第 3 版中关于“寄生组合继承”的部分。随着 ES6 的引入和对移动的强烈推动远离“新的”和更深的层次结构,是否还有使用寄生组合继承模式的目的?

今天用什么?我觉得我在学习一堆没用的模式。我知道现在人们只使用Object.create()Object.assign(),那为什么还要提到这些继承模式呢?

【问题讨论】:

  • 冒着暴露自己无知的风险——我已经专业用JS开发了好几年了,我从来没有听说过这个。此外,如果我在 Google 中搜索它,我得到的前两个帖子是关于它的 stackoverflow 问题,这些问题似乎来自与您阅读同一本书的人...herehere...
  • 是的,我看过这些帖子,但是没有一个回答我的问题,即它们今天是否实际使用。我明白它是如何工作的,但绝对没有记住模式..
  • 是的,抱歉,我只想说,它似乎唯一一次被提及的是阅读这本特定书籍的人。似乎它更像是一种学术性的东西,而不是广泛使用的东西,至少在这个名字下。我认为你不应该关心记住它。
  • 我知道现在人们只使用 Object.create() 和 Object.assign(),那为什么还要提到这些继承模式呢? 为什么还要提到它们呢?因为它们在上次更新那本书时并不存在,更不用说最初写的时候了。感谢Object.create,在我看来这种模式现在已经过时了。
  • @EvenSteven 是的,有很多模式没有new(包括Object.create,绝对使用new关键字),但我想说目前 ES6 类正在(或正在)增长并且是常态,而那些确实依赖于new

标签: javascript inheritance ecmascript-6


【解决方案1】:

我所知道的在 Javascript 中进行继承的最“正确”的方法是:

let SubClass = function() { SuperClass.call(this, arguments); /*Do other stuff here*/ }
SubClass.prototype = Object.create(SuperClass.prototype);

Object.create(o){__proto__: o} 大致相同,将创建另一个以o 为原型的对象。

然而,由于世界已经改变,我们现在生活在 ES6 领域,你宁愿使用 ES6 标准的继承方式:

class SubClass extends SuperClass {
    constructor() { super(...arguments); /*Do other stuff here*/ }
}

这些是当今使用最广泛的方法,请坚持使用适合您的方法。

希望这会有所帮助。

【讨论】:

  • 不是引入了“类”和“扩展”来欢迎 Javascript 的新手吗?即使在 ES6 中,他们是否不鼓励常规使用?
  • 他们不是。 classextends 没有在 Javascript 中引入新的继承方式。它们是prototype inheritance 的语法糖。您可以在此Link 阅读更多信息
  • 谢谢!我刚刚对我在哪里遇到这种“信念”进行了一些调查研究,看来我应该小心听取 Eric Elliot 的建议。他往往是 Google 上的顶级结果,但将 Crockford 的工作发挥到了极致。我真的不知道从哪里开始了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多