Don't Use the Object 建设者

Object构造函数允许我们创建一个对象。但是,由于有更短的创建对象的方法,因此不需要创建对象。

例如,代替使用Object构造函数创建对象来编写以下内容,我们可以编写为:

const obj = new Object();obj.a = 1;obj.b = 2;

 

我们也可以这样写:

const obj = { a:1, b:2};

 

如我们所见,通过直接创建对象文字而不是使用Object构造函数,我们避免了很多额外的代码输入。

我们还可以创建构造函数或类来创建模板函数,以用于创建新对象。

例如,我们可以Person使用类语法创建构造函数,以便可以Person使用new运算符创建新的对象。

我们可以编写以下代码来创建Person构造函数:

class Person { constructor(name) { this.name = name; }}

 

在上面的类中,我们有name用于在name实例中设置实例变量的参数Person。

然后,我们可以Person使用它创建多个实例,如下所示:

const jane = new Person('jane');const joe = new Person('joe');const alex = new Person('alex');

 

在上面的代码中,我们创建了3个新Person实例,它们具有不同的值,this.name这些值是通过name参数传递的。

我们还可以通过编写以下代码将实例方法添加到类中:

class Person { constructor(name) { this.name = name; } greet(greeting) { return `${greeting} ${this.name}`; }}

 

在上面的代码中,我们有greetinstance方法,该方法接受一个greeting字符串并将其与this.nameinstance变量组合。

然后我们可以这样称呼它:

console.log(jane.greet('hi'));console.log(joe.greet('hi'));console.log(alex.greet('hi'));

 

然后我们得到:

hi janehi joehi alex

 

记录在控制台日志输出中,如我们所说greet的那样传递'hi'为的值greeting。

如我们所见,使用JavaScript类,我们可以创建具有相同实例变量和方法的对象。

创建对象的另一种方法是使用Object.create方法。此方法很有用,因为我们可以在创建对象时设置对象的原型。

例如,如果我们要创建一个以另一个对象作为原型的对象,则可以编写以下代码:

const bar = { a:1}const foo = Object.create(bar);foo.b = 1;foo.c = 2;

 

在上面的代码中,我们有了bar对象,该foo对象通过使用Object.create方法用作对象的原型。

然后我们增加额外的属性b和c对foo对象本身。b并且c是foo自己的,还是非继承财产,a是原型的财产foo。

原型是子对象的模板对象。对象从其原型继承属性。

如果我们记录该foo对象,则会得到foo的__proto__属性具有a其值设置为1的属性。

如果要创建没有原型的对象,则可以Object.create使用参数调用该方法,null以便__proto__不设置该属性。

例如,我们可以编写以下代码来创建对象:

const foo = Object.create(null);foo.b = 1;foo.c = 2;

 

然后,如果我们记录的值foo,我们将看到它没有__proto__属性,这意味着该对象没有原型。

结论

有很多方法可以简洁地创建对象。我们不应该只使用Object构造函数来创建对象。

这是因为与定义对象文字相比,它没有任何好处。它们都继承Object和使用构造函数是完成同一件事,但他们各自方法有所不同。

创建对象的替代方法,包括使用类作为新对象的模板。

最后,我们可以使用Object.create来创建具有所需原型的对象

posted on 2020-05-18 11:49  颉旺飞  阅读(198)  评论(0编辑  收藏  举报