使用闭包来创建私有属性javascript

时间:2015-01-06 05:19:10

标签: javascript object properties

我在代码大战中有这个提示

“在javascript对象上没有私有属性这样的东西!但是,也许有吗?

实现一个函数createSecretHolder(secret),它接受任何值作为secret并返回一个只有两个方法的对象“

我很确定它希望我使用闭包来实现这一点,我已经阅读了如何在这里做到这一点:

Private variables and closures

https://developer.mozilla.org/en-US/Add-ons/SDK/Guides/Contributor_s_Guide/Private_Properties

这是我的代码:

function createSecretHolder(secret) {
  return {
    var _secret = secret;
    this.getSecret = function(){
      return _secret;
    }

    this.setSecret = function(secret){
      _secret = secret;
    }
  }
}

然而,我收到此错误:

[eval]:6
 var _secret = secret;
              ^
SyntaxError: Unexpected token =
    at Object. ([eval]-wrapper:6:22)
    at 
    at evalScript (node.js:536:25)
    at startup (node.js:80:7)
    at node.js:906:3

我尝试使用私有值创建一个对象文字以保存secret的值,并且主要遵循上面列出的来源中的示例。如何使用两种方法创建一个闭包来获取和设置数据?如何在不添加其他属性的情况下存储secret的值?

2 个答案:

答案 0 :(得分:2)

您正在尝试返回一个对象文字,其中您不能拥有赋值语句。要获得closure属性,需要将变量存储在函数作用域中,如此

function createSecretHolder(secret) {
    var _secret = secret;

    return {
        getSecret: function() {
            return _secret;
        },

        setSecret: function(secret) {
            _secret = secret;
        }
    }
}

现在,由于closure属性,_secret属于getSecretsetSecret函数的范围。所以他们可以访问它。

答案 1 :(得分:0)

问题是return关键字实际上返回的对象具有您没有遵循的结构。 试试这个:

function createSecretHolder() {
  var _secret = secret;
return {

    getSecret : function(){
      return _secret;
    }
,
    setSecret : function(secret){
      _secret = secret;
    }
  }
}