我认为这是一个相当简单的问题,但我找不到答案。我有一个我创建的对象文字分组函数,我想知道如何创建一个在对象文字内部的变量,并且该对象文字中的所有函数都可以编辑/访问。目前,我知道如何做到这一点的唯一方法是创建一个全局变量,但我想以这种方式停止填充全局变量。为了更好地描述我正在寻找的东西
谢谢,任何帮助。
var clickCount = 0;
/* I would like to place clickCount inside hideShowFn Object but all function inside need access to it, so global within hideShowFn */
hideShowFn = {
init:function(){
$('.clickMe').click(this.addToCount);
},
addToCount:function(){
clickCount++;
$('<p>'+ clickCount + '</p>').appendTo('body');
}
}
hideShowFn.init();
答案 0 :(得分:2)
创建一个立即调用的函数并返回该对象,并在函数内部包含私有变量,如下所示:
var obj = (function () {
var privateStuff = 'private';
return {
func1: function () {
//do stuff with private variable
},
func2: function () {
//do stuff with private variable
}
};
}());
这是在Functional Programming中拥有私有变量的方法。
答案 1 :(得分:2)
http://jsfiddle.net/mattblancarte/aT3J6/10/
另一种选择是伪古典风格:
function Constructor(){
var private = 'private';
this.public = 'public';
this.methods = {
//your methods here...
};
}
var obj = new Constructor();
不要忘记使用'new'关键字,否则您将成为全局范围。
您转换为此样式的代码将是:
function Test(){
var that = this,
clickCount = 0;
this.init = function(){
$('.clickMe').click(this.addToCount);
};
this.addToCount = function(){
clickCount++;
$('<p>'+ clickCount + '</p>').appendTo('body');
};
}
var test = new Test();
test.init();
答案 2 :(得分:1)
您可以按Cokegod说明进行关闭,或者只需将变量添加到对象并使用this
hideShowFn = {
clickCount: 0,
init:function(){
$('.clickMe').click(this.addToCount);
},
addToCount:function(){
this.clickCount++;
$('<p>'+ this.clickCount + '</p>').appendTo('body');
}
}
hideShowFn.init();
这不起作用,因为Musa说addToCount
中的范围将是点击的dom节点。
但是看到Cokegod的回答。