2016-04-11 8 views

回答

0

这几乎a classic JS module pattern - an immediately-invoked function expression (IIFE)返回对象,但也允许可变的隐私。

我说差不多因为模块模式通常看起来像这样。

var customer = (function() { 
    // 
})(); 

下面的行作用域的字符串作为局部变量,并将其应用于name。它不能在IIFE 之外访问,因为它的范围是

var name = "Contoso"; 

因为该函数是立即调用它返回该对象的它适用于customer。一种方法返回值name,另一种方法更新它。

return { 
    getName: function() { return name; }, 
    setName: function (newName) { name = newName; } 
}; 

但是,由于name是 “私人” 的IIFE(模块),customer.name回报undefined

要获取名称,请使用返回对象customer.getName()上的方法。

要设置新名称,请使用其他方法customer.setName('Bob')

DEMO

这两种方法可以访问私有变量namedue to a very important concept know as function closure借此功能,可以挂在(“关闭围绕”)外词法环境 - 有用在这种情况下,事情就是这样的事件监听器。

0

customer.name被调用时,JavaScript的发现customer被评估以这样的:

function() { 
var name = "Contoso"; 
return { 
     getName: function() { 
      return name; 
     }, 
     setName: function (newName) { 
      name = newName; 
     } 
}; 

此函数中的变量name,属于功能的存储器,或者本地范围,并且不提供任何地方的外功能。 name被宣布为变数名称没有this.name,所以它不是由avaliable 通过功能,只功能。

因此,在函数内部,我们可以说name = blah,但outisde我们不能。我们必须在函数中调用一个函数来访问它。这就是我们的getNamesetName。它们在代表customer的函数内,因此可以访问本地变量name

我们可以声明name这个。在函数内部命名,或者只是改变我们正在试图访问customer.name像这样的方式:

alert(customer.getName()); 
0

变量客户是不确定的,因为它的功能范围之外,在线alert(customer.name);