我正在学习JS,并通过创建带有new关键字的对象对幕后发生的事情感到有些困惑。我发现,当我们使用new关键字时,基本上会发生三件事:
- 将创建一个新的空对象并将其分配给它。
- 函数主体执行。通常,它会对此进行修改,并为其添加新属性。
- 返回此值。
在函数主体执行的第二步中,它是否运行所有主体代码并将具有“ this”的所有函数和属性放入在步骤1中创建的对象中?我的意思是,在步骤2中运行函数主体的原因是什么。这是示例代码:
01
答案 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() );