Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.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:constructor函数这个关键字_Javascript_Function Constructor - Fatal编程技术网

Javascript:constructor函数这个关键字

Javascript:constructor函数这个关键字,javascript,function-constructor,Javascript,Function Constructor,以下两个代码段之间的区别是什么: function HelloService(){ var service = this; service.itemList = [] service.hello = function(){ return "Hello World!!"; }; service.addItem = function(){ service.itemList.push(1); } } 因为据我所知,hello函数内部和hello函

以下两个代码段之间的区别是什么:

function HelloService(){
  var service = this;
  service.itemList = []

  service.hello = function(){    
    return "Hello World!!";
  };

  service.addItem = function(){
    service.itemList.push(1);
  }
}

因为据我所知,hello函数内部和hello函数外部的
this
指向同一个实例

有人能向JAVA解释一下上述问题吗


编辑:我添加了一个
addItem
函数。这里我不理解
addItem函数中
service.itemList
var itemList
之间的区别。您能解释一下该函数内部的差异吗?

Javascript函数中的局部变量不会作为该
的属性添加。第一个相当于:

function HelloService(){
  this.hello = function(){    
    return "Hello World!!";
  };
}
但不是:

function HelloService(){
  var hello = function(){    
    return "Hello World!!";
  };
}

它不起任何作用,因为由
hello
引用的函数从未使用过,并且在HelloService的范围之外无法访问。

Javascript函数中的局部变量不会作为
的属性添加。第一个相当于:

function HelloService(){
  this.hello = function(){    
    return "Hello World!!";
  };
}
但不是:

function HelloService(){
  var hello = function(){    
    return "Hello World!!";
  };
}

它不起任何作用,因为hello引用的函数从未使用过,并且在HelloService范围之外无法访问。

此函数内部的
完全取决于您在第一个函数中调用函数的方式(使用
this.hello
),您可以从外部(
console.log)调用hello函数(新HelloService().hello();
)。在第二个示例中,hello只是一个局部变量,无法从外部访问。了解“this”的确切含义非常值得在JS中,要理解它与Java中的任何类概念几乎没有任何关系。正如adeneo所说,它与调用有关,而不是声明。另一方面,在第二个示例中,这个是什么并不重要,因为变量与这个无关。
这个
是否是sam也不重要e在函数内部和外部,函数创建自己的作用域,变量在该作用域中声明,由于变量是函数作用域,它们只能在该作用域(或“较低”的作用域)内访问。
函数内部的此
完全取决于您在第一个作用域中调用函数的方式(使用
this.hello
)您可以从外部调用hello函数(
console.log(new HelloService().hello());
)。在第二个函数中,hello只是一个局部变量,无法从外部访问。“this”的确切含义值得一读在JS中,要理解它与Java中的任何类概念几乎没有任何关系。正如adeneo所说,它与调用有关,而不是声明。另一方面,在第二个示例中,这个是什么并不重要,因为变量与这个无关。
这个
是否是sam也不重要e在函数内部和外部,函数创建自己的作用域,变量在该作用域中声明,由于变量是函数作用域,它们只能在该作用域(或“较低”的作用域)内访问。了解JS
this
:,
var varName=“val”的更多资源;
通常只等于
this.varName=“val”
在全局上下文中时。@chiliNUT-这不是上下文或
的值,而是作用域。在函数内部时,即使
是全局的,变量也不会添加到它中->@adeneo嘿,我有点困惑,我想我们是一致的,这很明显是为什么你的小提琴不起作用;我使用作用域和内容t作为同义词,但显然您使用它们的方式不同,如果两个变量在同一范围内,它们是否不在同一上下文中?请澄清:)即,在您的示例中,
是全局对象,但显然您不在全局范围内,您在函数的范围内。有关JS
的更多信息:,
var varName=“val”
通常只等于
this.varName=“val”在全局上下文中时。@chiliNUT-这与上下文或
this
的值无关,而是与范围有关。在函数中,即使
这个
是全局变量,变量也不会被添加到函数中->@adeneo嘿,我有点困惑,我想我们是一致的,很明显你的小提琴不起作用;我使用范围和上下文作为同义词,但显然您使用它们的方式不同,如果两个变量在同一范围内,它们不在同一上下文中吗?请澄清:)即,在您的示例中,
是全局对象,但显然您不在全局范围内,而是在函数的范围内