背景:C#开发人员最近开始涉足javascript
以下是在JavaScript中创建对象的两种方法。它们之间有什么区别?创建对象时应该使用/优先使用哪种方法?为什么?
class John {
constructor(name, birth, height) {
this.name = name;
this.birth = birth;
this.height = height;} }
var Person = function(name, birth, height) {
this.name = name;
this.birth = birth;
this.height = height;}
答案 0 :(得分:2)
他们做的大致相同。 class
语法是ES2015中引入的,为您做一些事情:
它内置检查是否已在创建新对象的过程中调用了该函数,从而消除了没有new
的情况下调用构造函数所允许的全部错误。
它允许在构造函数和方法中使用super
。
这比较简单,特别是如果您有子类。
如果您执行诸如Error
或Array
之类的内置子类,则容易得多(您可以不用class
来完成)。< / p>
但是,如果您喜欢使用旧的语法,则可以不用class
来完成所有操作。
当然,如果不通过Babel之类的工具转换为较旧的语法,就无法在IE等过时的浏览器上使用新语法。
(必须注意:在JavaScript的原型继承上使用类陷阱是一种样式选择,而不是必需的。如果愿意,您可以直接使用原型继承。)
您可能还会发现this answer很有用,将class
语法与使用function
语法进行的相同操作进行比较。
答案 1 :(得分:0)
在es6之前,构造函数是我们如何实现类结构和oop的方法。您仍然可以,但是作为C#开发人员,您将更习惯于类符号。只要浏览器支持es6。它们都是函数
答案 2 :(得分:0)
class
语法是来自JavaScript的较新“版本”(称为ES6)的代码。
虽然之前使用过function
声明,但被称为“原型”。
因此要回答您的问题,确定优先顺序,实际上取决于您要支持的浏览器。您可以使用caniuse检查浏览器支持:https://caniuse.com/#search=es6%20classes
来自C#,我认为对您来说最大的不同是对浏览器的支持。由于您不知道代码将在何处真正运行,因此应经常检查caniuse。
就像其他人提到的那样,有些编译器会减轻您的痛苦,例如bublé或babel。但是,请注意它们具有各自的优点/缺点。这是我在该主题上找到的第一篇教程:https://scotch.io/tutorials/javascript-transpilers-what-they-are-why-we-need-them
话虽如此,欢迎来到JavaScript社区。 p>