【问题标题】:Should classes replace constructor functions in javascript?类应该替换javascript中的构造函数吗?
【发布时间】:2017-06-07 21:30:25
【问题描述】:

据我所知,类只是旧式构造函数的语法糖。这是否意味着我应该用类完全替换构造函数? 示例:

构造函数

function person(name,age) {
	this.name = name;
	this.age = age;
}
person.prototype.logAll = function() {
	console.log(this.name,this.age);
};

var rachel = new person("Rachel Green", 52);
rachel.logAll();

class person {
	constructor(name,age) {
		this.name = name;
		this.age = age;
	}
	logAll() {
		console.log(this.name,this.age);
	}
}

var rachel = new person("Rachel Green", 50);
rachel.logAll();
这两个完全等价吗?

【问题讨论】:

  • 类的优点是更容易管理。在您的类中,您可以定义构造函数、析构函数、getter、setter,然后可以在整个应用程序中使用它们。在上面的示例中,它们是等价的,但我强烈建议使用类。
  • 类更易于使用和维护,使用所谓的this 可以减轻您的痛苦。来自 vanilla javascript,出于以下几个原因,我建议您尽可能使用 classes:1) 任何其他不熟悉 javascript 的程序员都可以在您的代码中找到一点 OOP。 2)更容易维护。 3) 更容易阅读。 4) 提供与旧原型语法相同的功能。因此,总的来说,在这种特定情况下,它们都给出了相同的输出,但为了阅读和维护,尽可能使用 classes

标签: javascript class ecmascript-6


【解决方案1】:

这取决于您使用它们的目的。不要忘记,很多旧版浏览器不支持类,因此如果您正在编写需要在大多数浏览器中运行的客户端 JS,通常最好坚持使用旧版 JS 样式代码。

如果你不关心旧浏览器,或者这是服务器端 JS,那么我会使用类。

对于大多数开发人员(JS 之外)来说,类更容易理解,而且(认为)它们更简单、更易于编写。

顺便说一句,我最近写了很多 ES6 JavaScript,对我来说感觉就像是一个成熟得多的 JS 版本(不要激怒我)。老实说,只要它有意义,并且不会影响您的可交付成果,请尝试使用新功能;这就是他们的目的!

【讨论】:

  • 无需坚持使用旧版 JavaScript,只需使用转译器即可。
  • 这在一定程度上是对的,但除非我弄错了,否则有一些 es6 功能在 es5 中并没有真正的等价物
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 2011-03-17
相关资源
最近更新 更多