abc*_*234 1 javascript class object ecmascript-6
早些时候在js,我们能够做到这一点:
var emptyObj = {};
Run Code Online (Sandbox Code Playgroud)
这创建了一个空对象,但是这个对象是哪个类的实例还是我缺少的东西?类的概念已经在es6中引入,那么我们如何能够在没有类的情况下在es5和更早版本中定义对象(因为对象只是类的实例)?请澄清!
...但是这个对象是哪个类的实例......?
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.prototype以squared在其上.有一些细微的差别(主要是为了支持super),但它仍然是相同的原型继承,无论是在ES5还是ES2015中,构造函数都覆盖在它上面.