无法访问对象文字中的方法

时间:2015-04-28 06:12:16

标签: javascript function object methods literals

在对象文字中,我们应该能够使用this.name访问这些方法,但在我的情况下,我使用this.init()来触发方法,但却给了我未定义的函数。但是,如果我引用allTabAnimation.init()它有效,为什么会这样?

var allTabAnimation = {
    desktopClick: function (){
        $('.allForms .investorOptions .investorOptions-wrapper .select-options input+label').click(function (e){
            $this = $(this),
            $thisHookNumber  = $(this).data("hook"),
            $allTab = $(".tab-content"),
            $selectedTab  = $(".tab-content[data-hook="+$thisHookNumber+"]"),
            this.init(); // doesn't work
            // allTabAnimation.init(); // this work
        });
    },

init: function (){
    this.condition($selectedTab, $allTab);
},

2 个答案:

答案 0 :(得分:4)

this存储在变量中(或使用.bind$.proxy),因为在您的情况下this指的是不是父对象的元素,如此

var allTabAnimation = {

    desktopClick: function() {
        var self = this;

        $('.allForms .investorOptions .investorOptions-wrapper .select-options input+label').click(function(e) {

            $this = $(this),
                $thisHookNumber = $(this).data("hook"),
                $allTab = $(".tab-content"),
                $selectedTab = $(".tab-content[data-hook=" + $thisHookNumber + "]")

            self.init();
        });
    },

    init: function() {
        this.condition($selectedTab, $allTab);

    }
} 

答案 1 :(得分:1)

范围(this)在回调中发生变化,这就是为什么你需要将它声明为变量。遵循约定,您应该使用

var that = this;