在jQuery回调中访问父属性

时间:2008-10-31 16:55:46

标签: javascript jquery

不确定我是否正确地表达了这一点,但在回调中如何引用基类的controls属性?

这已经困扰了我一段时间,我通常会解决这个问题,但如果有人能够告诉我应该如何正确地做到这一点,我将不胜感激。

var base = function() {
    var controls = {};

    return {
        init: function(c) {
            this.controls = c
        },
        foo: function(args) {
            this.init(args.controls);
            $(this.controls.DropDown).change(function() {
                $(this.controls.PlaceHolder).toggle();
            });
        }
    }
};

很多人,

3 个答案:

答案 0 :(得分:2)

使用闭包的力量:

var base = function() {
    var controls = {};

    return {
        init: function(c) {
                this.controls = c
        },
        foo: function(args) {
                var self = this;

                this.init(args.controls);
                $(this.controls.DropDown).change(function() {
                        $(self.controls.PlaceHolder).toggle();
                });
        }
    }
};

答案 1 :(得分:2)

虽然closurespreferred,但您也可以使用jquery bind传递对象:

var base = function() {
    var controls = {};

    return {
        init: function(c) {
            this.controls = c
        },
        foo: function(args) {
            this.init(args.controls);
            $(this.controls.DropDown).bind('change', {controls: this.controls}, function(event) {
                $(event.data.controls.PlaceHolder).toggle();
            });
        }
    }
};

答案 2 :(得分:1)

你需要在这里利用闭包。

var base = function() {
var controls = {};

return {
    init: function(c) {
            this.controls = c
    },
    foo: function(args) {
            this.init(args.controls);
            $(this.controls.DropDown).change(function(controls) {
                    return function(){
                        $(controls.PlaceHolder).toggle();
                    }
            }(this.controls));
    }
}

};