Javascript:对象和类

abc*_*234 1 javascript class object ecmascript-6

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

var emptyObj = {};
Run Code Online (Sandbox Code Playgroud)

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

T.J*_*der 5

...但是这个对象是哪个类的实例......?

Object,但继续阅读......

在es6中引入了类的概念......

并不是的.ES2015(又名"ES6")添加了class语法,但它没有添加类的概念.ES5和ES2015都具有类的概念(具有通用性的对象组),并且在基于类的OOP语言(如Java或C#)的意义上都没有类.

JavaScript具有原型继承,并且它具有构造函数.当您使用new构造函数时,new创建一个对象,该对象使用函数prototype属性引用的对象作为其原型.

var emptyObj = {};
Run Code Online (Sandbox Code Playgroud)

做同样的事情

var emptyObj = new Object();
Run Code Online (Sandbox Code Playgroud)

假设Object有默认值.

ES2015的class语法只是更容易定义构造函数和分配给它们的prototype属性的对象.这个ES5代码

function Foo(value) {
    this.value = value;
}
Foo.prototype.squared = function() {
    return this.value * this.value;
};
Run Code Online (Sandbox Code Playgroud)

和这个ES2015代码:

class Foo {
    constructor(value) {
        this.value = value;
    }
    squared() {
        return this.value * this.value;
    }
}
Run Code Online (Sandbox Code Playgroud)

双方创建一个Foo构造函数,并分配给对象Foo.prototypesquared在其上.有一些细微的差别(主要是为了支持super),但它仍然是相同的原型继承,无论是在ES5还是ES2015中,构造函数都覆盖在它上面.