我对于应该使用javascript创建对象的方式感到困惑。似乎至少有两种方法。一种是使用对象文字符号,而另一种是使用构造函数。有一个相对于另一个的优势吗?
如果您没有与对象相关联的行为(即,如果对象只是数据/状态的容器),则可以使用对象文字。
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作用于普通旧数据对象的外部函数:
verify
var data = { foo: 42, bar: 43 }; function verify(data) { return data.foo === data.bar; }
但是,这在封装方面是不利的:理想情况下,与实体关联的所有数据和行为都应该一起生活。