【问题标题】:Javascript: Objects and ClassesJavascript:对象和类
【发布时间】:2017-09-13 00:41:19
【问题描述】:

在早期的 js 中,我们能够做到这一点:

var emptyObj = {};

这创建了一个空对象,但该对象是哪个类的实例,或者我缺少什么? 在 es6 中引入了类的概念,那么我们如何在没有类的情况下在 es5 及更早版本中定义对象(因为对象只不过是类的实例)? 请澄清!

【问题讨论】:

标签: javascript class object ecmascript-6


【解决方案1】:

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

Object,但请继续阅读...

es6中已经引入了类的概念...

不是真的。 ES2015(又名“ES6”)添加了class语法,但没有添加类的概念。 ES5 和 ES2015 都具有类的概念(具有共同性的对象组),并且都没有 Java 或 C# 等基于类的 OOP 语言意义上的类。

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 中,它仍然是相同的原型继承,构造函数覆盖在其上。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 2019-01-17
    • 2015-01-21
    • 1970-01-01
    • 2017-11-21
    • 2019-09-09
    相关资源
    最近更新 更多