Class vs Prototype

时间:2015-03-25 09:05:25

标签: javascript class ecmascript-6

是什么让ES6类语法比传统原型方法更好?

我应该用类替换所有当前对象,因为我不关心跨浏览器的东西吗?

3 个答案:

答案 0 :(得分:2)

ES6类比基于原型的OO模式简单。拥有一个方便的声明形式使类模式更易于使用,并鼓励互操作性。类支持基于原型的继承,超级调用,实例和静态方法和构造函数。

答案 1 :(得分:0)

基于ES6类的语法比传统的原型方法好得多,

  • 与构造函数和构造函数继承相比,类make    初学者更容易上手。

  • 语言支持子类化。

  • 内置构造函数是可子类化的。

  • 不再需要继承库了;代码会变得更多    在框架之间移植。

  • 它们为将来的高级功能提供了基础    (mixins等)。

因此,如果您不关心跨浏览器,那么请使用基于类的语法。

快乐的编码!!

答案 2 :(得分:0)

在大多数情况下,类只是旧有方法上的语法糖。我们待会儿再讲到这一点,但是类至少可以做一件事,而类可以用不能的旧方法:正确扩展Array和HTMLElement之类的内置构造函数。此外,当不使用new进行调用时,类将自动引发,而旧方法是在构造函数中添加instanceof检查。

现在使用糖,请考虑以下老式构造函数:

function Foo(bar) {
  this._bar = bar;
  Object.defineProperty(this, 'bar', {
    get: function() { return this._bar },
    set: function(value) {
      console.log(value);
      this._bar = value;
    }
  });
};

Foo.prototype.someMethod = function() { return this.bar + 5 };
Foo.someStaticMethod = function() { return 3 };

有点...丑陋。考虑等效的类:

class Foo {
  static someStaticMethod () {
    return 3;
  }

  constructor (bar) {
    this._bar = bar;
  }

  get bar () {
    return this._bar;
  }

  set bar (value) {
    console.log(value);
  }

  someMethod () {
    return this.bar + 5;
  }
}

更清洁。是否应该重写现有代码更多的是折腾,但绝对可以将类用于新内容。