Javascript:对象文字表示法和对象构造函数之间有什么区别?

3 javascript object

我正在通过Codeacademy工作,他们表明你必须写两个.但他们没有解释为什么你需要两者.

Bra*_*don 6

构造函数赋予对象一种身份感.它本质上是如何创建它可以重复使用的蓝图.它与经典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);
Run Code Online (Sandbox Code Playgroud)

对象文字是一种传递即时对象的方法,该对象的结构和创建不需要重复使用.与经典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'
});
Run Code Online (Sandbox Code Playgroud)

它也是一种简单的方法,可以模拟传递给其他没有附加方法的数据.例如,您有一个采用JSON的API:

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