在早期的 js 中,我们可以这样做:
var emptyObj = {};
这创建了一个空对象,但这个对象是哪个类的实例,或者我缺少什么? 类的概念已经在 es6 中引入,那么我们如何能够在 es5 和更早版本中定义对象而不存在类(因为对象只不过是类的实例)? 请澄清!
最佳答案
...but this object is an instance of which class...?
对象
,但请继续阅读...
The concept of classes has been introduced in es6...
不是真的。 ES2015(又名“ES6”)添加了 class
语法,但没有添加类的概念。 ES5 和 ES2015 都有类的概念(具有共性的对象组),并且都没有基于类的 OOP 语言(如 Java 或 C#)意义上的类。
JavaScript 具有原型(prototype)继承,并在其上覆盖了构造函数。当您将 new
与构造函数一起使用时,new
会创建一个对象,该对象使用函数的 prototype
属性引用的对象作为其原型(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 中,它仍然是相同的原型(prototype)继承,构造函数覆盖在它上面。
关于Javascript:对象和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43450759/