2012-07-06 99 views
2

我是JavaScript新手,现在我对两个概念感到困惑:构造函数和原型的对象,以及闭包。对象与构造函数和闭包在javascript中的区别

这里,闭包意味着嵌套在其中的其他函数及其环境的函数。

我觉得这两个概念好像是从某个角度来看相似:

他们都有变数,这就像在其他语言领域。在关闭时,它被称为环境,我认为这是一种价值观和某些变量之间的约束。

此外,他们都有“方法”。在关闭中,我认为内部嵌套函数就像这样。

那么,这两个概念之间的本质区别是什么?或者,这两种记忆数据的方法有何不同?

如果我在上面的这些概念中犯了一些错误,请纠正我,谢谢。

+0

这不是什么“封闭”意味着 – newacct 2012-07-07 01:36:37

回答

3

那么,闭包没有像这样的“方法”,因为它不是一个真正的具体对象 - 它更像是一个概念。闭包使用函数来实现,而函数本身可以有方法,但是你不会将闭包描述为具有方法。正如你所说,关闭是一个功能有关其环境的信息。

另一方面,原型只是一个基本的JavaScript对象,所以说原型有方法是正确的。

0

关闭原型真的不是一回事。

原型是在其上创建新对象的模板(简而言之);因此,例如:

var someType = function() 
{ 
}; 

someType.prototype.someOtherFunction = function() 
{ 
}; 

只要你创建的sometype一个实例,它将有一个someOtherFunction部件安装这是一个功能。另外,其他实例提取值。所以很容易“添加”字符串功能,例如:

String.prototype.doSomething = function() 
{ 

} 

现在所有的字符串都得到了这个方法。

瓶盖真的内的另一个范围了子范围,它的捕获或周围的变量从外范围到内范围,使得它封闭的行为。

因此,例如:

function something() 
{ 
    for(var j = 0; j < 10; j++) 
    { 
     setTimeout(function() 
     { 
      alert(j); 
     }, 25); 
    } 
} 

在这种形势下,j值由setTimeout回调周围封闭。在任何其他上下文中,j不会存在于内部函数中(因为它既不是全局函数也不是函数的参数),但因为已经以这种方式引入,所以内部函数被称为关闭而不是变量引用。

相关问题