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

Unable to access method in object literal

在对象文字中,我们应该能够使用 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);
},

this 存储在变量中(或使用 .bind, or $.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);

    }
} 

回调中的作用域 (this) 发生了变化,这就是为什么您需要将其声明为变量的原因。按照惯例,您应该使用

var that = this;