我在代码大战中有这个提示
“在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的值?
答案 0 :(得分:2)
您正在尝试返回一个对象文字,其中您不能拥有赋值语句。要获得closure属性,需要将变量存储在函数作用域中,如此
function createSecretHolder(secret) {
var _secret = secret;
return {
getSecret: function() {
return _secret;
},
setSecret: function(secret) {
_secret = secret;
}
}
}
现在,由于closure属性,_secret
属于getSecret
和setSecret
函数的范围。所以他们可以访问它。
答案 1 :(得分:0)
问题是return
关键字实际上返回的对象具有您没有遵循的结构。
试试这个:
function createSecretHolder() {
var _secret = secret;
return {
getSecret : function(){
return _secret;
}
,
setSecret : function(secret){
_secret = secret;
}
}
}