【发布时间】:2019-07-19 12:11:12
【问题描述】:
我正在学习 JS,对使用 new 关键字创建对象的幕后发生的事情有些困惑。我发现,当我们使用 new 关键字时,基本上会发生三件事:
- 一个新的空对象被创建并分配给它。
- 函数体执行。通常它会修改它,向它添加新属性。
- 返回 this 的值。
看,在第二步中,当函数体执行时,它是否会运行所有的函数体代码并将所有具有“this”的函数和属性放入在第一步中创建的对象中?我的意思是,在步骤 2 中运行函数体的原因是什么。这是示例代码:
function PageState(){
let currentState = new homeState();
this.change = function(state){
currentState=state;
}
}
const page = new PageState();
function homeState(){
document.querySelector('.div').style.width = "100px";
}
【问题讨论】:
-
构造函数代码初始化新对象。它可能什么都不做,也可能做很多事情;这完全取决于应用程序。
-
@zer00ne,已发布
-
@zer00ne,只有一个问题,它是否运行所有主体代码并放置所有具有“this”的函数和属性(例如:this.car="BMW" 和 this.drive=function (){}) 到在步骤 1 中创建的对象?所以,运行函数体的原因是找到分配给“this”的属性和函数,并将它们放入步骤1中创建的对象中。对吗?希望清楚
-
是的,它会运行所有代码,直到 return 或最后一条语句,以先到者为准。该代码并不是特别有启发性。 currentState 最初引用一个新的 homeState 实例,但通过 change 方法设置它会将该引用替换为一个新值,并且不会返回任何内容。也没有任何方法可以读取该值。
标签: javascript