基本的javascript代码布局

时间:2012-08-13 21:18:25

标签: javascript jquery

我认为这是一个相当简单的问题,但我找不到答案。我有一个我创建的对象文字分组函数,我想知道如何创建一个在对象文字内部的变量,并且该对象文字中的所有函数都可以编辑/访问。目前,我知道如何做到这一点的唯一方法是创建一个全局变量,但我想以这种方式停止填充全局变量。为了更好地描述我正在寻找的东西

http://jsfiddle.net/aT3J6/

谢谢,任何帮助。

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(); 

3 个答案:

答案 0 :(得分:2)

创建一个立即调用的函数并返回该对象,并在函数内部包含私有变量,如下所示:

var obj = (function () {
    var privateStuff = 'private';
    return {
        func1: function () { 
            //do stuff with private variable
        },
        func2: function () {
            //do stuff with private variable
        }
    };
}());

http://jsfiddle.net/BE3WZ/

这是在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的回答。