使用new关键字时与创建对象的过程混淆

时间:2019-07-19 03:35:07

标签: javascript

我正在学习JS,并通过创建带有new关键字的对象对幕后发生的事情感到有些困惑。我发现,当我们使用new关键字时,基本上会发生三件事:

  
      
  1. 将创建一个新的空对象并将其分配给它。
  2.   
  3. 函数主体执行。通常,它会对此进行修改,并为其添加新属性。
  4.   
  5. 返回此值。
  6.   

在函数主体执行的第二步中,它是否运行所有主体代码并将具有“ this”的所有函数和属性放入在步骤1中创建的对象中?我的意思是,在步骤2中运行函数主体的原因是什么。这是示例代码:

01

1 个答案:

答案 0 :(得分:1)

在此代码段中,步骤1自动发生,然后将某些成员(属性或方法)分配给this,即步骤2,然后返回步骤3,返回this

调用const object1 = new MyObject()意味着创建一个对象,其中greeting设置为“ Hi”,name设置为“ Tim”,并且getMessage设置为返回级联的函数信息;然后将该对象分配给object1。

您可以通过调用const object2 = new MyObject();来创建MyObject的新实例,并且在该函数运行时,会有一个新的this

您可以修改对象而不会影响用于创建其他对象的原始功能/对象。

function MyObject() {
  this.greeting = 'Hi';
  this.name = 'Tim';
  this.getMessage = function() {
    return this.greeting + ' ' + this.name + '!';
  }
}

const object1 = new MyObject();
const object2 = new MyObject();
object2.greeting = 'Yo';
object2.name = 'Sam';
const object3 = new MyObject();

console.log( object1.getMessage() );
console.log( object2.getMessage() );
console.log( object3.getMessage() );