我正在创建一个具有多个功能的对象..即:
var test = {
setA: function(){
console.log(a)
}
endB: function(){
console.log(a)
}
}
如何声明变量a,以便只能在测试对象和该对象中的每个函数中访问它?访问它有什么独特之处吗?
我知道我可以声明一个全局变量,但宁愿避免这样做。
答案 0 :(得分:4)
var test = (function() {
var a = 'test';
return {
setA: function(){ console.log(a) }, // <-- was missing a comma
endB: function(){ console.log(a) }
};
})();
这会将a
置于函数调用中,从而创建一个新的变量环境。只有在此环境中的功能才能访问它。
包含这些函数的对象从函数返回,并分配给test
。这两个功能将继续可以访问a
。
示例: http://jsfiddle.net/yWdFw/
这种模式:
(function() {
// your code
})();
...通常称为立即调用的函数表达式或IIFE。您正在定义一个函数,并立即调用它。因此,其返回值是分配给test
的内容。
答案 1 :(得分:0)
帕特里克答案的替代方法是向对象添加属性,然后通过this
var test = {
a: 'blah',
setA: function(){
console.log(this.a)
},
endB: function(){
console.log(this.a)
}
}