Javascript:对象和类

时间:2017-04-17 11:39:05

标签: javascript class object ecmascript-6

早些时候在js,我们能够做到这一点:

var emptyObj = {};

这创建了一个空对象,但是这个对象是哪个类的实例还是我缺少的东西? 类的概念已经在es6中引入,那么我们如何能够在没有类的情况下在es5和更早的版本中定义对象(因为对象只是一个类的实例)? 请澄清!

1 个答案:

答案 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中,它仍然与构造函数重叠的原型继承相同。