jQuery闭包&对象属性访问

时间:2009-06-29 07:06:16

标签: jquery closures

有谁能告诉我如何在这里访问变量“a”:

var test = {
   a: 3,
   init: function() {
       $("body").click(function() {
          alert(a);
       });
   }
};

test.init();

这也不起作用:alert(this.a);

提前致谢。

5 个答案:

答案 0 :(得分:2)

实际上,我更喜欢这个:它是自我设置和初始化:


function createX() {
    var self = {
        init: function() {
            $("body").click(this.doit);
        },

        doit: function(data, b) {
            alert(self.testing());
        },

        testing: function() {
            return 4;
        }
    }
    self.init();
    return self;
}


$(function() {
    createX();
});

答案 1 :(得分:0)

您必须引用该对象:

test.a

答案 2 :(得分:0)

添加自我引用: -

var test = {
   a: 3,
   init: function() {
       var self = this
       $("body").click(function() {
          alert(self.a);
       });
   }
};

答案 3 :(得分:0)

好的,这有效:

var test = {
    a: 3,
    init: function() {
        var self = this;
        $("body").click(function() {
            self.doit();
        });
    },

    doit: function() {
        var self = this;
        alert(self.a);
    }
};

但我需要重用doit函数,所以现在这不起作用:


var test = {
    a: 3,
    init: function() {
        var self = this;
        $("body").click(self.doit);
    },

    doit: function() {
        var self = this;
        alert(self.a);
    }

};

答案 4 :(得分:0)

好的,这解决了第二个问题:

function test() {
    var self;
    return {
        init: function() {
            self = this;
            $("body").click(this.doit);
        },

        doit: function(data, b) {
            alert(self.testing());
        },

        testing: function() {
            return 4;
        }
    }
}


$(function() {
    var x = test();
    x.init();
});