【问题标题】:Javascript: What is the difference between object literal notation and the object constructor? [duplicate]Javascript:对象文字表示法和对象构造函数有什么区别? [复制]
【发布时间】:2013-06-01 21:51:31
【问题描述】:

我只是在通过 Codeacademy 工作,他们表明你必须同时编写两者。但他们没有解释为什么你需要两者。

【问题讨论】:

标签: javascript object


【解决方案1】:

构造函数赋予对象一种身份感。它本质上是如何创建可重复使用的蓝图。它与经典 OOP 中的类非常相似且经常混淆。

如果您经常拥有一堆“汽车”对象,并且所有汽车通常都有方法或属性,那么您可以创建一个 Car 构造函数来帮助封装它。

function Car(numPassengers) {
  this.numPassengers = numPassengers;
}

Car.prototype = {
    accelerate: function () {
      // blah
    },
    brake: function () {
      // blah
    }
};

var jetta = new Car(4);
var bmwZ4 = new Car(2);

对象字面量是一种传递即时对象的方法,该对象的结构和创建不需要重用。与经典的 OOP 相比,类似于 Java 中的 Map(除了 javascript 对象文字仍然可以有方法)。一个常见的用例是一个函数,它接受一堆可能的参数,但每个参数都是可选的。

function someActionThatTakesOptionalParams(options) {
  if (options.doAlert) {
    alert(options.doAlert);
  }
  if (options.someOtherProperty) {
    // do some work
  }
}

someActionThatTakesOptionalParams({
  doAlert: 'this will show up in an alert box',
  someOtherProperty: 5,
  hello: 'world'
});

这也是一种方便的方法,可以对传递给其他东西的数据进行建模,而无需附加任何方法。例如,您有一个采用 JSON 的 API:

$.ajax({
  url: 'someApiEndpoint',
  method: 'get',
  params: {
    x: 5,
    y: 10
  }
});

【讨论】:

    【解决方案2】:

    这不是一个愚蠢的问题。实际上,Object 构造函数,尤其是 Array 构造函数可能会很棘手,因为它们采用具有不同语义的不同参数,这可能会导致您产生细微的错误。

    推荐的方法是使用文字{}[]

    MDN 说:

    > new Array(element0, element1, ..., elementN)
    > new Array(arrayLength)
    

    第一句构造了一个数组并将每个参数推入其中。 第二句构造一个长度=arrayLength的Array。 如果您尝试使用恰好是整数的单个元素构造-推送一个数组,会发生什么?明白了!

    【讨论】:

    • 我认为用户更感兴趣的是为什么有两种不同的方式来创建对象...
    猜你喜欢
    • 2014-03-27
    • 2011-04-27
    • 2019-03-19
    • 2012-12-22
    • 2020-09-28
    • 2011-06-01
    • 1970-01-01
    相关资源
    最近更新 更多