当前位置: 首页 > 面试题库 >

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

施锋
2023-03-14
问题内容

我对于应该使用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作用于普通旧数据对象的外部函数:

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

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

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



 类似资料:
  • 问题内容: 我有一个只包含字段而没有方法的类,如下所示: 这可以很容易地翻译成字典。该类对于将来的添加更加灵活,使用可以更快。那么使用dict会有好处吗?字典会比全班更快吗?并且比具有插槽的课程快吗? 问题答案: 你为什么要把它当作字典?有什么好处?如果您以后要添加一些代码,会发生什么?您的代码会去哪儿? 类用于捆绑相关数据(通常是代码)。 字典用于存储键- 值关系,其中通常键都是同一类型,并且所

  • 问题内容: 我正在使用c / c 为osx和linux开发命令行界面可执行文件。该项目将链接到opencv。我应该使用libc 还是libstdc ++? 问题答案: 我会为每个操作系统使用本机库,即GNU / Linux上的libstdc 和Mac OS X上的libc 。 libc 在GNU / Linux上不是100%完整的,而libstdc 更完整时使用libc并没有真正的优势。另外,如果

  • 问题内容: 和CSS 和有什么不一样?我应该使用哪一个?为什么? 问题答案: 所有这些答案似乎都是不正确的。与直觉相反,在CSS 中不是pixel 。至少不是在简单的物理意义上。 从W3C,EM,PX,PT,CM,IN…阅读本文,了解如何为CSS发明一个“神奇的”单元。的含义因硬件和分辨率而异。(该文章是最新的,最新更新为2014-10。) 我自己的思考方式: px单位是CSS的魔术单位。它与当前

  • 问题内容: 我正在一个将Angular和Underscore都作为依赖项的项目。 当我需要创建对象的副本时,根据当时的心情,我可以使用或 在我看来,这些方法中的一种可能比另一种更快速/可靠/健壮。 假设已经包含两个库,那么这两个函数中的任何一个是否存在使另一个函数更好或更坏使用的已知问题? 问题答案: 关于您的问题: angular.copy和_.clone是不同的。这不是哪个更好的问题,而是关于

  • 问题内容: 我想从文本文件中读取每一行并将它们存储在ArrayList中(每一行是ArrayList中的一项)。 到目前为止,我知道BufferedInputStream写入缓冲区,并且仅在缓冲区为空时才进行另一次读取,这可以最大程度地减少或至少减少操作系统的操作量。 我正确吗-我说得通吗? 如果以上情况是在任何情况下,任何人都想使用DataInputStream。最后,我应该使用这两个中的哪一个

  • 问题内容: 当我基于C ++知识使用Java时,我喜欢使用以下方式初始化变量。 一段时间后,我改变了习惯 我碰到了其他源代码,有些使用1st约定,有些使用2nd约定。 我可以知道大家都推荐哪种惯例,为什么? 问题答案: 我发现第二种样式(一口气声明和初始化)更出色。原因: 一目了然,该变量是如何初始化的。通常,在读取程序并遇到变量时,首先会去声明它(在IDE中通常是自动的)。使用样式2,你会立即看