Javascript:构造函数或文字符号?

时间:2016-08-29 04:49:12

标签: javascript

这个问题更多的是针对那些专业的开发人员,或者作为自由职业者/团队/企业/等工作。

使用文字javascript表示法比构造函数表示法更受追捧吗?编写Javascript时使用的是什么样的符号真的很重要吗?雇主是否关心,还是有更专业的记谱法?

文字说明

var snoopy = {
    species: "beagle",
    age: 10
};

构造词符号

var buddy = new Object();
buddy.species = "golden retriever";
buddy.age = 5;

3 个答案:

答案 0 :(得分:1)

如果文字符号适用于您的情况,那么它通常更紧凑,通常比第二种方法更受欢迎。有些类型的属性无法用文字符号表示,因此必须通过手动分配第二个方案中的属性来设置它们。

例如,如果要引用对象上的某些其他属性,则不能在文字定义中执行此操作,因此必须对已构造的对象上的属性赋值执行此操作。

var snoopy = {
    species: "beagle",
    age: 10
};

snoopy.peopleAge = convertDogAgeToPeopleAge(snoopy.age);

你所谓的“构造函数符号”并不是大多数人会说的是你如何使用构造函数来初始化一个对象。通常,当您希望能够生成多个给定类型的对象时,使用构造函数,例如:

function Animal(species, age) {
    this.species = species;
    this.age = age;
}

var buddy = new Animal("golden retriever", 5);
console.log(buddy.species);    // "golden retriever"

var snoopy = new Animal("beagle", 10);
console.log(snoopy.species);    // "beagle"

你所谓的构造函数只是另一种创建新空对象的方法。这两个都做同样的事情:

var x = {};
var y = new Object();

同样,第一种方式通常是首选方式,因为它更紧凑,并且可能更容易让解释器进行优化,而Javascript社区似乎只是决定优先使用{}[]的文字声明除非有明确的理由必须使用new xxxx()表格。

答案 1 :(得分:0)

符号new Object(){}在技术上是相同的,因此没有区别。如果你写:

let obj = {
    prop: 'val',
    .
    .
}

在我看来它看起来更好并且保存了一些按键,因为你不必每次都输入obj.

对阵列也是如此。使用new Array()或仅[]几乎相同,除了new Array(<length>)采用可选的length参数,该参数用于初始化数组的长度。无论如何,即使像这样构造的数组的长度大于零,它的值只是undefined,像map()reduce()forEach这样的函数会忽略这些值,所以你需要以不同的方式“填充”数组,这使得这种构造方式变得有些无用。

另一件事是在Javascript中使用“真实”构造函数的对象,如:

function MyType () {
    this.prop = '';
}

如下所示:

var type = new MyType();

因为可以按type instanceof MyType之类的类型进行比较,以便按类型区分实例。

答案 2 :(得分:0)

这两种符号都是等价的,但文字符号更好,原因如下:

  • 对象文字简短且高度可视化。反复重复实例变量以设置一些属性不仅需要更多时间来键入,而且使得快速读取代码变得更加困难。但这很明显。

  • 一些JS引擎用于优化具有一组常量属性的对象的内存访问和使用。在设置其属性之前创建空白对象可能会阻止引擎进行此类优化,或者只是减慢进程。

  • 对象文字非常接近,或者技术上是JSON表示法的超集。即使不编写JS的人也可能会不时使用JSON格式,因此它已成为每个人都能理解的非常流行的语法。

  • 大多数JS minifiers会将var foo = new Object();替换为var f=new Object;而不是更短var f={};

  • Google says to use the literals.我可能有偏见,但听他们听起来是个好计划。

  • 如Google的样式指南中所述,如果属性名称具有特殊字符,则属性访问不适用于点运算符,因此属性访问看起来不太一致。同时,只需引用特殊属性名称即可使用文字。