早些时候在js,我们能够做到这一点:
var emptyObj = {};
这创建了一个空对象,但是这个对象是哪个类的实例还是我缺少的东西? 类的概念已经在es6中引入,那么我们如何能够在没有类的情况下在es5和更早的版本中定义对象(因为对象只是一个类的实例)? 请澄清!
答案 0 :(得分:5)
...但是这个对象是哪个类的实例......?
Object
,但继续阅读......
在es6中引入了类的概念......
不是真的。 ES2015(又名“ES6”)添加了 class
语法,但它没有添加类的概念。 ES5和ES2015都有类的概念(具有通用性的对象组),并且在基于类的OOP语言(如Java或C#)的意义上都没有类。
JavaScript具有原型继承,并且它具有构造函数。将new
与构造函数一起使用时,new
会创建一个对象,该对象使用函数的prototype
属性引用的对象作为其原型。
var emptyObj = {};
做同样的事情
var emptyObj = new Object();
,假设Object
有默认值。
ES2015的class
语法只是更容易定义构造函数和分配给其prototype
属性的对象。这个ES5代码
function Foo(value) {
this.value = value;
}
Foo.prototype.squared = function() {
return this.value * this.value;
};
和这个ES2015代码:
class Foo {
constructor(value) {
this.value = value;
}
squared() {
return this.value * this.value;
}
}
创建Foo
构造函数和分配给Foo.prototype
并且squared
的对象。存在一些细微差别(主要是为了支持super
),但无论是在ES5还是ES2015中,它仍然与构造函数重叠的原型继承相同。