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