一尘不染

我应该使用对象文字还是构造函数?

javascript

我对于应该使用javascript创建对象的方式感到困惑。似乎至少有两种方法。一种是使用对象文字符号,而另一种是使用构造函数。有一个相对于另一个的优势吗?


阅读 232

收藏
2020-05-01

共1个答案

一尘不染

如果您没有与对象相关联的行为(即,如果对象只是数据/状态的容器),则可以使用对象文字。

var data = {
    foo: 42,
    bar: 43
};

运用KISS原则。如果除了简单的数据容器之外不需要任何其他内容,请使用简单的文字。

如果要向对象添加行为,则可以使用构造函数并在构造过程中向对象添加方法,或者为类提供原型。

function MyData(foo, bar) {
    this.foo = foo;
    this.bar = bar;

    this.verify = function () {
        return this.foo === this.bar;
    };
}

// or:
MyData.prototype.verify = function () {
    return this.foo === this.bar;
};

这样的类也像数据对象的架构一样工作:您现在(通过构造函数)具有某种约定(通过构造函数),该对象初始化/包含哪些属性。一个自由的文字只是数据的一个无定形的斑点。

您可能还具有一个verify作用于普通旧数据对象的外部函数:

var data = {
    foo: 42,
    bar: 43
};

function verify(data) {
    return data.foo === data.bar;
}

但是,这在封装方面是不利的:理想情况下,与实体关联的所有数据和行为都应该一起生活。

2020-05-01