Javascript 当我们使用new关键字时,会混淆创建对象的过程

Javascript 当我们使用new关键字时,会混淆创建对象的过程,javascript,Javascript,我在学习JS,对使用新关键字创建对象的幕后操作有点困惑。我发现,当我们使用新关键字时,基本上会发生三件事: 将创建一个新的空对象并将其指定给该对象 函数体执行。通常它会对此进行修改,并向其添加新属性 将返回此的值 在第二步中,当函数体执行时,它是否运行所有的主体代码,并将所有具有“this”的函数和属性放入在第1步中创建的对象中?我的意思是,在步骤2中运行函数体的原因是什么。以下是示例代码: 函数PageState(){ 让currentState=newhomestate(); this.ch

我在学习JS,对使用新关键字创建对象的幕后操作有点困惑。我发现,当我们使用新关键字时,基本上会发生三件事:

  • 将创建一个新的空对象并将其指定给该对象
  • 函数体执行。通常它会对此进行修改,并向其添加新属性
  • 将返回此的值
  • 在第二步中,当函数体执行时,它是否运行所有的主体代码,并将所有具有“this”的函数和属性放入在第1步中创建的对象中?我的意思是,在步骤2中运行函数体的原因是什么。以下是示例代码:

    函数PageState(){
    让currentState=newhomestate();
    this.change=函数(状态){
    当前状态=状态;
    }
    }
    常量页面=新页面状态();
    函数homeState(){
    document.querySelector('.div').style.width=“100px”;
    }
    
    在这个代码片段中,步骤1自动发生,然后我将一些成员(属性或方法)分配给
    这个
    ,这是步骤2,然后步骤3,
    这个
    返回

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

    通过调用
    constobject2=newmyobject(),可以创建MyObject的新实例this

    可以修改对象,而不影响用于创建其他对象的原始函数/对象

    函数MyObject(){
    this.greeting='Hi';
    this.name='Tim';
    this.getMessage=函数(){
    返回this.greeting+''+this.name+'!';
    }
    }
    const object1=新的MyObject();
    const object2=新的MyObject();
    object2.greeting='Yo';
    object2.name='Sam';
    const object3=新的MyObject();
    log(object1.getMessage());
    log(object2.getMessage());
    
    log(object3.getMessage())发布一些代码构造函数代码初始化新对象。它可能什么也不做,也可能做很多事情;这完全取决于应用程序。@zer00ne,posted@zer00ne,只是一个问题,它是否运行所有的主体代码,并将所有具有“this”(例如:this.car=“BMW”和this.drive=function(){})的函数和属性放入在步骤1中创建的对象中?所以,运行函数体的原因是找到分配给“this”的属性和函数,并将它们放入在步骤1中创建的对象中。对吗?希望是clearYes,它运行所有代码,直到返回或最后一条语句,以先到者为准。该守则并不是特别有启发性。currentState最初引用一个新的homeState实例,但通过change方法将其设置为使用新值替换该引用,并且不返回任何内容。也没有任何方法可以读取值。感谢您的友好回答,我能想象这样的情况吗?在步骤2中运行函数体的原因是找到分配给“this”(例如:this.car=“BMW”和this.drive=function(){})的所有属性和函数,并将它们放入步骤1中创建的函数中。对吧?对。将其视为在第一步中创建的
    对象
    ,而不是在第一步中创建的函数