Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建函数实例时是否执行代码?_Javascript - Fatal编程技术网

Javascript 创建函数实例时是否执行代码?

Javascript 创建函数实例时是否执行代码?,javascript,Javascript,嘿,伙计们,我是JS新手,想问一下我什么时候创建下面函数的实例,然后它的执行方式是否与我使用PageState()时相同?当我使用const page=new PageState()时会发生什么 函数PageState(){ 让currentState=newhomestate(); this.change=函数(状态){ 当前状态=状态; } } 常量页面=新页面状态() 当我使用constpage=newpagestate()时会发生什么 使用PageState的对象创建一个新对象。pro

嘿,伙计们,我是JS新手,想问一下我什么时候创建下面函数的实例,然后它的执行方式是否与我使用
PageState()
时相同?当我使用
const page=new PageState()时会发生什么

函数PageState(){
让currentState=newhomestate();
this.change=函数(状态){
当前状态=状态;
}
}
常量页面=新页面状态()
当我使用
constpage=newpagestate()时会发生什么

使用
PageState的对象创建一个新对象。prototype
引用作为其原型,然后
PageState
中的代码运行。
PageState
中的代码创建一个新的
homeState
对象和一个新的函数对象(用于
change
属性)。(即
change
函数不是由显示的代码执行的,而是可以通过
page.change(/*…*/);
稍后执行。)尽管每次都会创建一个新的函数对象,但它将在任何现代JavaScript引擎上重用底层代码(本例中没有太多:-))。这个新函数是创建它的上下文的闭包,这意味着即使在
PageState
返回后,它也可以访问
currentState
局部变量

有关闭包的更多信息:

  • 在我贫血的小博客上:
  • 以下是:

我更改了代码以获得一个工作示例。自始至终都有一些解释

函数PageState(){
this.currentState=0;
this.change=函数(状态){
this.currentState=状态;
}
}
//创建包含函数页状态的变量
常量页面=新页面状态();
//访问页面的一个属性,本例为设置为0的整数
console.log(“当前状态的初始值:”+page.currentState)
//还可以将函数存储为属性
//您可以这样调用此函数:
结果=第页更改(1)
//我将结果保存在一个变量中,以便查看返回值(currentState)

console.log(“当前状态的更改值:”+page.currentState)
使用
new
关键字调用函数时,您正在创建一个新对象。您可以通过
this
向该对象添加属性和方法。您可以在此函数中创建局部变量,它们在创建的对象中不可用。我建议您查看
模块模式

尝试时发生了什么?您可以阅读此内容了解更多信息注意,您不是在创建函数PageState的实例,而是创建一个构造函数为函数PageState的对象-即。。page()将不起作用。因为页面不是一个函数。如果你在做oop,你可能想看看ES6类。