我指的是MDN关于JavaScript的'未来保留字'的文章(用于新的严格模式) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Future_reserved_keywords。所有保留字都表明JavaScript可能遵循非原型继承过程,但这对已经开发的应用程序和修改意味着什么?有谁知道这些“未来保留词”有多长,以及这些变化是否会在不久的将来曝光?
如果这不是正确的地方,请随意移动它。
答案 0 :(得分:5)
JavaScript是否会成为一个适当的'基于班级的语言?
幸运的是,没有。即使没有基于类, 已经是一种合适的语言。如果没有类,你永远不会失去创建对象的能力。
我指的是MDN关于JavaScript's 'future reserved words'的文章。所有保留字都表明JavaScript可能遵循非原型继承过程
不,他们不太可能放弃这一点。他们只是希望保持所有选项的开放以实现这些功能,并希望阻止您使用这种语法。
就像Harmony drafts for classes和当前的ES6提案所示,大多数这些概念都可以在原型世界中很好地实现。
但这对已经开发的应用程序和修改意味着什么?
不多。 EcmaScript中的所有更改都尽可能向后兼容(请记住严格模式的所有麻烦是什么?)。
有谁知道这些未来的保留字有多长,以及这些变化是否会在不久的将来曝光?
我认为这篇文章提供了一个很好的概述。您可能希望比较ES3,ES5和ES6 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