JavaScript将成为一个适当的'基于班级的语言?

时间:2014-07-16 16:16:42

标签: javascript class inheritance prototypal-inheritance reserved-words

我指的是MDN关于JavaScript的'未来保留字'的文章(用于新的严格模式) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Future_reserved_keywords。所有保留字都表明JavaScript可能遵循非原型继承过程,但这对已经开发的应用程序和修改意味着什么?有谁知道这些“未来保留词”有多长,以及这些变化是否会在不久的将来曝光?

如果这不是正确的地方,请随意移动它。

3 个答案:

答案 0 :(得分:5)

  

JavaScript是否会成为一个适当的'基于班级的语言?

幸运的是,没有。即使没有基于类, 已经是一种合适的语言。如果没有类,你永远不会失去创建对象的能力。

  

我指的是MDN关于JavaScript's 'future reserved words'的文章。所有保留字都表明JavaScript可能遵循非原型继承过程

不,他们不太可能放弃这一点。他们只是希望保持所有选项的开放以实现这些功能,并希望阻止您使用这种语法。

就像Harmony drafts for classes和当前的ES6提案所示,大多数这些概念都可以在原型世界中很好地实现。

  

但这对已经开发的应用程序和修改意味着什么?

不多。 EcmaScript中的所有更改都尽可能向后兼容(请记住严格模式的所有麻烦是什么?)。

  

有谁知道这些未来的保留字有多长,以及这些变化是否会在不久的将来曝光?

我认为这篇文章提供了一个很好的概述。您可能希望比较ES3ES5ES6 draft(甚至earlier versions)。

如上所述,这些并非旨在变成"变化"。不要忘记,在过去的黑暗中,JavaScript语法基于Java,并且继承了它的关键字集。删除Java类型,以及为更强大的概念添加新关键字,可以看作是在EcmaScript开发中设定方向。

答案 1 :(得分:2)

  

所有保留字表示JavaScript可能遵循非原型继承过程

完全没有。语法和语义之间存在差异。仅仅因为您在Java中使用class关键字创建类,并不意味着JavaScript中也会发生这种情况。在幕后,语言表现不同。

ES6引入了class语法:

class Person() {
  constructor(name) {
    this.name = name;
  }

  static create() { }

  sayName() {
    console.log(this.name);
  }
}

看起来像“班级”吧?但它只是构造函数及其原型对象的语法糖

function Person() {
  this.name = name;
}

Person.create = function() { };

Person.prototype.sayName = function() {
  console.log(this.name);
};

static关键字定义构造函数而不是原型的函数(例如Person.create而不是Person.prototype.create)。

同样地,我可以想象final在某些时候将属性定义为writeable而不是configurable


结论:JS这样的语言的基本概念不太可能完全改变。

答案 2 :(得分:0)

直接回答这个问题,不;这将是语言的巨大根本转变。

其中大多数已被保留多年。 JavaScript最大的缺陷之一并不是它是一种原型语言,而是它在某些方面试图伪装成一种经典的OOP语言,让它对老守卫更熟悉。

基于类和基于原型都不是天生错误或正确的;但他们是非常不同的。其他原型语言一直存在,但它们并没有像开发基于类的语言那样受到开发人员的熟悉和熟悉。

我见过的一个很好的比较定义如下,由Eric Elliott提供。

基于类别:OOP =>面向对象的编程

基于原型:OOP =>仅对象编程

Eric还提供了关于原型继承的精彩视频

http://ericleads.com/2013/06/classical-inheritance-is-obsolete-how-to-think-in-prototypal-oo/

恕我直言,是关于原型与经典继承的最佳读物之一;甚至不是技术性的阅读,而是更多的哲学。

http://carnotaurus.philipcarney.com/post/3010984357/classes-versus-prototypes-some-philosophical-and