【问题标题】:the difference between object with constructor and closure in javascriptjavascript中带构造函数的对象和闭包的区别
【发布时间】:2012-07-06 15:41:49
【问题描述】:

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

这里,闭包是指嵌套了其他函数的函数及其环境。

我觉得这两个概念从某种角度来说似乎是相似的:

它们都有变量,就像其他语言中的字段一样。在闭包中,它被称为环境,我认为它是值和某些变量之间的一种绑定。

此外,它们都有“方法”。最后,我认为内部嵌套函数的行为就是这样。

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

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

【问题讨论】:

  • 这不是“关闭”的意思

标签: javascript closures prototype


【解决方案1】:

嗯,闭包本身没有“方法”,因为它不是一个真正的具体对象——它更多的是一个概念。闭包是使用函数实现的,函数本身可以有方法,但你不会将闭包描述为有方法。正如你所说,闭包是一个函数加上关于其环境的信息。

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

【讨论】:

    【解决方案2】:

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

    原型是创建新对象的模板(简而言之);比如:

     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 不会存在于内部函数内部(因为它既不是全局函数也不是函数的参数),但是因为它是以这种方式引入的,所以内部函数被称为 close 在变量引用上。

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 2015-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多