ES2015(ES6)`class`语法提供了哪些好处?

我对ES6课程有很多疑问。

使用class语法有什么好处?我读到公共/私有/静态将成为ES7的一部分,这是一个原因吗?

而且,是class一种不同的OOP还是它仍然是JavaScript的典型继承?我可以使用它修改它.prototype吗?或者它只是相同的对象,但有两种不同的方式来声明它。

有速度的好处吗?如果你有一个像大应用程序这样的大应用程序,可能更容易维护/理解?


LEATH
浏览 881回答 2
2回答

侃侃无极

ES6类是我们今天使用的原型类系统的语法糖。它们使您的代码更简洁,自我记录,这是使用它们的理由(在我看来)。使用Babel来转换这个ES6类:class Foo {  constructor(bar) {    this._bar = bar;  }  getBar() {    return this._bar;  }}会给你这样的东西:var Foo = (function () {  function Foo(bar) {        this._bar = bar;  }  Foo.prototype.getBar = function () {    return this._bar;  }  return Foo;})();第二个版本并不复杂,维护的代码更多。当涉及到继承时,这些模式变得更加复杂。因为这些类编译成我们一直使用的相同原型模式,所以你可以对它们进行相同的原型操作。这包括在运行时添加方法等,访问方法Foo.prototype.getBar等。今天ES6中有一些基本的隐私支持,虽然它基于不导出您不想访问的对象。例如,您可以:const BAR_NAME = 'bar';export default class Foo {  static get name() {    return BAR_NAME;  }}并且BAR_NAME不可用于其他模块直接引用。许多库已经尝试支持或解决这个问题,比如Backbone和他们的extends帮助器,它们采用类似方法的函数和属性的未经验证的散列,但是没有用于暴露原型继承的编组系统,不涉及原型。随着JS代码变得越来越复杂并且代码库越来越大,我们开始发展很多模式来处理继承和模块之类的事情。IIFE用于创建模块的私有范围有很多括号和parens; 缺少其中一个可能导致一个完全不同的有效脚本(在模块可以将下一个模块作为参数传递给它之后跳过分号,这很少有用)。tl; dr:它是我们已经做过的糖,并且在代码中明确了你的意图。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript