通过构造函数和object-literal语法选择对象创建

时间:2016-06-29 06:13:28

标签: javascript

在JavaScript中,可以使用Object的结合构造函数来创建对象:

var person = new Object();
person.firstName = 'John';
person.lastName = 'Doe';

几乎所有人似乎都喜欢将对象创建的方式视为文字:

var person2 = {
  firstName: 'Peter',
  lastName: 'Smith'
}

现在我想知道: 为什么构造函数方式完全被忽略?

但特别是: 是否有人应该选择一种方式而不是另一种呢?

我的意思是构造函数必须出于某种原因......

1 个答案:

答案 0 :(得分:5)

  

我的意思是构造函数必须出于某种原因......

Object构造函数最初是创建对象的唯一方法。对象初始化程序语法({})是added in JavaScript 1.2,是1997年Netscape Navigator 4.0中更新的JavaScript。

首选项语法优先于Object构造函数有几个原因:

  • 它更短
  • 它更具表现力,特别是在使用属性初始化器时
  • 无法覆盖/遮蔽(而Object可以) 1

相比之下,当使用可能指向Object函数的变量或者可能指向某个其他函数时,基本没有理由使用Object来创建除间接之外的对象,例如:< / p>

function constructAndInit(ctor, props) {
    var obj = new ctor();
    if (props) {
        for (var key in props) {
            obj[key] = props[key];
        }
    }
    return obj;
}

// Maybe use use Object...
var foo = constructAndInit(Object);

// ...or maybe you use somnething else
var bar = constructAndInit(NiftyThingy);

我们当然会定期使用Object函数而不用调用它来创建对象:

  • 我们想要访问根对象原型,Object.prototype
  • 使用Object属性的功能,例如Object.createObject.defineProperty

1 “无法覆盖/遮蔽(而Object可以)”以下是遮蔽Object的示例:

function foo() {
    var Object = {
        foo: "bar"
    };

    // ...later...
    var o = new Object(); // fails
}
foo();